문제

나는 단순한 객체를 웹 서비스에 전달하려고 노력하고 있으며 웹 클라이언트 프로젝트를 컴파일하는 동안이 오류에 실제로 붙어 있습니다.

'trimbrokerutil.metadata []' '' 'trimbrokerasmxproxy.asmxproxy.metadata []로 암시 적으로 변환 할 수 없습니다.

다음은 TrimbrokerUtil.dll에 컴파일 된 "유틸리티"프로젝트입니다.

namespace TRIMBrokerUtil
{
    public class MetaData
    {
    protected string _Name;
    protected string _Value;
    public MetaData(string keyword, string setting) 
    {
        this.Name = keyword;
        this.Value = setting;
    }
    public string Name
    {
        get
        {
        return this._Name;
        }
        set
        {
        Name = value;
        }
    }
    public string Value
    {
        get
        {
        return this._Value;
        }
        set
        {
        _Value = value;
        }
    }
    }

다음은 웹 서비스의 스 니펫이 있습니다. 네임 스페이스 트림 브로커 서비스 {[Webservice (네임 스페이스 = "http://tempuri.org/")] [WebServiceBinding (conformsto = wsiprofiles.basicprofile1_1)] [ToolboxItem (false)] public class fileservice : system.web.services.webservice {

    [WebMethod]
    public string UploadFile(byte[] incomingArray
        , string FileName
        , long FileLengthInBytes
        , MetaData[] metaDataArray)
    {

... 그리고 나중에 사용 : 이와 같이 사용 :

Update update = BuildMetaData(metaDataArray);

...이:

private Update BuildMetaData(MetaData[] nvPairs)
{
    Update update = new Update();
    InputProperty[] ip = new InputProperty[nvPairs.Length];
    int i;
    for (i=0; i < nvPairs.Length; i++)
    {
    ip[i].Name = "udf:" + nvPairs[i].Name;
    ip[i].Val = nvPairs[i].Value;
    }
    update.Items = ip;
    return update;
}

다음으로 ( "웹 참조 추가"를 통해) 별도의 프로젝트에 ASMX 웹 서비스에 대한 프록시 클래스가 있으며 문제없이 컴파일합니다. 생성 된 참조.

    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/UploadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    public string UploadFile([System.Xml.Serialization.XmlElementAttribute(DataType="base64Binary")] byte[] incomingArray, string FileName, long FileLengthInBytes, MetaData[] metaDataArray) {
        object[] results = this.Invoke("UploadFile", new object[] {
                    incomingArray,
                    FileName,
                    FileLengthInBytes,
                    metaDataArray});
        return ((string)(results[0]));
    }

이제 웹 클라이언트 프로젝트 (default.aspx.cs)에서 컴파일에서 발생하는 오류의 경우 :

    using TRIMBrokerUtil;

public partial class _Default : System.Web.UI.Page
{
    private void UploadFile(HttpPostedFile postedFile
                , string fileNameOnly
                , MetaData[] metaDataArray)
    {
        string strURI = string.Empty;
        TRIMBrokerASMXProxy.ASMXProxy.FileService client = new TRIMBrokerASMXProxy.ASMXProxy.FileService();
        BinaryReader b = new BinaryReader(postedFile.InputStream);
        byte[] binData = b.ReadBytes(numBytes);
        TRIMBrokerASMXProxy.ASMXProxy.MetaData[] kvData = metaDataArray; // error complains about this line
        strURI = client.UploadFile(binData, fileNameOnly, binData.Length, kvData );

또한 위의 마지막 2 줄을 단순히이 한 줄로 변경하려고 시도했습니다.

strURI = client.UploadFile(binData, fileNameOnly, binData.Length, metaDataArray);

... 그러나 그 변경은 다음과 같이 읽는 컴파일러의 두 번째 오류를 도입합니다.

'trimbrokerasmxproxy.asmxproxy.fileservice.uploadfile (byte [], string, long, trimbrokerasmxproxy.asmxproxy.metadata [])에 대한 가장 잘로드 된 메소드 일치에는 몇 가지 잘못된 인수가 있습니다.

( "변환 할 수 없음"에 대한 원래 오류는 두 번째 오류입니다).

위의 장황에 대해 죄송합니다. 이 혼란에 빛을 비추도록 도울 수 있기를 바랍니다.

도움이 되었습니까?

해결책

TrimBrokerAsmxproxy.asmxproxy.metadata의 배열에 TrimbrokerUtil.metadata 배열을 할당하려고합니다. ASP.NET 프록시는 자체 유형을 선언합니다.

프록시 유형의 새 배열에 데이터를 복사하기 만하면됩니다.

다른 팁

웹 서비스에 대한 참조를 추가하면 Visual Studio는 웹 서비스의 기능에 대한 매개 변수로 사용되는 객체에 대한 코드를 자동으로 생성합니다. 이것은 당신의 곳입니다 TRIMBrokerASMXProxy.ASMXProxy.MetaData 수업은

이것은 당신과 동일하지 않습니다 TRIMBrokerUtil.MetaData 수업. 당신은 당신의 클래스를 제거 할 수 있습니다 TRIMBrokerUtil 네임 스페이스를 대신 웹 서비스 프록시에서 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top