我一直在收到錯誤:System.Web.Services.Protocols.SoapException:服務器無法處理請求。 ---> System.ArgumentNullException
System.Web.Services.Protocols.SoapException:服務器無法處理請求。 ---> System.ArgumentNullException
當我嘗試使用下面的代碼來調用我的web服務:
{
//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());
}
我的web服務方法十分簡單,它看起來像這樣:
[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,但當它到達web服務時,它總是被接收爲空。我使用wsdl.exe實用程序從WSDL生成webservice,顯然我不明白我應該使用的所有SOAP細節。有其他人遇到這個問題嗎?
我真的很喜歡Wireshark的想法。我正在使用ASP.NET開發服務器進行調試,所以一切都是本地的,但我會試一試。 乾杯; Dave – Daver 2009-02-18 23:04:21