문제

호출자에게 바이트 배열을 반환하는 웹 메소드가 작동했습니다.

public byte[] DownloadPDF(string URI)

다른 출력(문자열)을 반환하려면 이를 변경해야 했습니다.그래서 저는 이제 void를 반환하고 다음과 같은 3개의 매개변수를 사용하여 메서드를 완전히 변경하기로 결정했습니다.

public void DownloadFile(string URI, out byte[] docContents, out string returnFiletype)

내 웹 서비스는 올바르게 컴파일되지만 두 번째 매개변수에 문제가 있는 것 같습니다(예:바이트 배열) "웹 참조 추가"를 수행하고 프록시 클래스를 빌드할 때 메서드에 3개가 아닌 2개의 매개변수만 있기 때문입니다.

[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://tempuri.org/DownloadFile", RequestNamespace="http://tempuri.org/", ResponseNamespace="http://tempuri.org/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
    [return: System.Xml.Serialization.XmlElementAttribute("docContents", DataType="base64Binary")]
    public byte[] DownloadFile(string URI, out string returnFiletype) {
        object[] results = this.Invoke("DownloadFile", new object[] {
                    URI});
        returnFiletype = ((string)(results[1]));
        return ((byte[])(results[0]));
    }

두 번째 매개변수인 바이트 배열이 왜 무시되는지는 알 수 없지만 이것이 문제의 원인인 것 같습니다.

물론 이것은 컴파일 타임에 오류 메시지가 나타나는 웹 클라이언트 앱에서 나를 혼란스럽게 만듭니다.

No overload for method 'DownloadFile' takes '3' arguments

다음은 3개의 인수를 전달해야 하는 웹 클라이언트의 코드입니다.

myBrokerASMXProxy.ASMXProxy.FileService client = new myASMXProxy.ASMXProxy.FileService();

        byte[] fileDataBytes;
        string fileType;
        client.DownloadFile(URI, fileDataBytes, fileType);

바이트 배열을 반환하고 단일 "out" 매개 변수만 추가하도록 다시 변경할 생각이지만 이에 대해 전문가에게 물어보고 일반적으로 여러 출력 요구 사항을 처리하는 가장 좋은 방법은 무엇인지 생각했습니다.

도움이 되었습니까?

해결책

다음 서명을 넣어보는 것은 어떨까요?

public bool DownloadFile(string URI, out byte[] docContents, out string returnFiletype)

무슨 일이 일어나는지 보려고?Jon Skeet의 의견에 동의합니다. 하지만 여전히 작업 결과와 함께 bool을 반환할 수 있습니다.

다른 팁

바이트 배열은 무시되지 않습니다. 대신 리턴 유형으로 배치되고 있습니다. 왜 그렇게하는지 모르겠지만 내 견해로는 더 의미가 있습니다. 공허 메소드에서 매개 변수를 사용하지 않을 것입니다. 프록시 생성기가 매개 변수를 사용하여 모든 메소드를 가져 와서 첫 번째를 반환 유형으로 바꾸는 것으로 생각됩니다.

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