首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >System.Web.Services.Protocols.SoapException:服务器无法处理请求。-> System.ArgumentNullException

System.Web.Services.Protocols.SoapException:服务器无法处理请求。-> System.ArgumentNullException
EN

Stack Overflow用户
提问于 2009-02-18 22:35:45
回答 4查看 63.8K关注 0票数 3

我得到了一个错误:

System.Web.Services.Protocols.SoapException:服务器无法处理请求。-> System.ArgumentNullException

当我尝试使用以下代码调用我的When服务时:

代码语言:javascript
复制
{
//Create an echoSync request - set the services.
ServiceNameType sourceService = new ServiceNameType {Service = "echoSync", OnBehalfOf = "Source"};
ServiceNameType destService = new ServiceNameType {Service = "echoSync", OnBehalfOf = "Destination"};

//Create the request.
SDD2RequestType request = new SDD2RequestType
                  {
                      AppId = "echoSync",
                      SourceService = sourceService,
                      DestService = destService,
                      RequestId = "1",
                      RequestBody = "Ping"
                  };

//Create the originator.
originator originator = new originator {id = "123456789"};

//Create the transport.
SDD2Transport transport = new SDD2Transport {originatorValue = originator};

//Send the request.
SDD2ResponseType response = null;
response = transport.SDD2TransportOp(request);

//Write out the response.
System.Console.WriteLine(response.ResponseBody.ToString());
}

我的webservice方法非常简单,如下所示:

代码语言:javascript
复制
    [System.Web.Services.Protocols.SoapHeaderAttribute("originatorValue", Direction = System.Web.Services.Protocols.SoapHeaderDirection.InOut)]
    [System.Web.Services.WebMethodAttribute()]
    [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://memberdirect.net/SDD2/Transport", RequestElementName = "SDD2Transport", RequestNamespace = "http://cucbc.com/sdd2/transport/", ResponseElementName = "SDD2TransportResponse", ResponseNamespace = "http://cucbc.com/sdd2/transport/", Use = System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle = System.Web.Services.Protocols.SoapParameterStyle.Default)]
    [return: System.Xml.Serialization.XmlElementAttribute("SDD2Response", Namespace = "http://cucbc.com/sdd2/")]
    public override SDD2ResponseType SDD2TransportOp(SDD2RequestType SDD2Request)
    {
        if (SDD2Request == null) throw new ArgumentNullException("SDD2Request");
        var response = new SDD2ResponseType();

        switch (SDD2Request.AppId)
        {
            case "echoSync":
                response.AppId = SDD2Request.AppId;
                response.ProcessingStatus = ProcessingStatusType.Complete;
                response.RequestId = SDD2Request.RequestId;
                response.ResponseBody = "Pong";
                break;
            default:
                throw new System.NotImplementedException();
                break;
        }

        return response;
    }

当我进行调用时,我知道请求不是null,但是当它到达webservice时,它总是作为NULL接收。我使用wsdl.exe实用程序从WSDL生成了don服务,显然我并不理解SOAP的所有细节。有没有其他人遇到过这个问题?

EN

回答 4

Stack Overflow用户

发布于 2009-02-18 22:50:22

我不知道这是什么原因,所以这不是对你的问题的回答,而只是对进一步研究问题的方法的建议。

尝试使用嗅探器查看机器之间发送的实际数据,找出问题出在哪一端。我曾经成功地使用过一次Wireshark

票数 1
EN

Stack Overflow用户

发布于 2009-11-26 17:07:32

我也有同样的问题,尽管原因可能不同。当我在调试器中单步执行代码时,方法参数从实例变为空。

对于记录,这是由于RequestElementName与方法名不同造成的。可能还有其他影响因素,但是当我从方法定义中删除RequestElementName属性或者使其与方法名称相同时,null参数的问题就消失了。

例如,您的代码具有RequestElementName = "SDD2Transport“和方法名称SDD2TransportOp。

现在我不知道为什么这应该是一个问题,特别是因为您还有: System.Web.Services.Protocols.SoapParameterStyle.Default,= ParameterStyle没有包装,这意味着ElementName无论如何都不会被使用。

我想知道这是否是.NET SOAP客户端协议类中的错误,因为发生的情况是,尽管在web服务中调用了正确的方法(因为它在SOAP操作标头中标识),但参数不会被反序列化。

在我的例子中,为了删除RequestElementName属性,每次重新创建生成的C#类时,我都必须对其进行编辑。请注意,我无法控制源WSDL,因为它是由第三方提供的。

票数 1
EN

Stack Overflow用户

发布于 2009-02-18 23:16:28

我没有机会按照Configurator的建议使用Wireshark,但是我能够通过在解决方案资源管理器中更新Web引用来解决这个问题。

经过一个多小时的努力,我找到了一个如此简单的解决方案,这让我有点沮丧,但我希望这篇文章能帮助到一些人。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/563162

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档