HI,
我的工作是创建一个Web服务,它充当了我们拥有的另一个Web服务,因此客户端没有注意到差异。我创建了我的整个Web服务,它使用起来很好,因为我使用它并且输出都是相同的。问题是,我创建了一个客户端应用程序,我使用旧的Web服务,如果我将webreference的url更改为新服务并重试,我会收到错误:
服务器无法处理 服务器无法识别 HTTP标头SOAPAction
如果我看一下两个网络服务中Reference.cs的差异,我注意到属性的差异很小,我认为这个问题。
新服务:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="SprWebServiceSoap", Namespace="http://ws.hl7.trispark.com/")]
public partial class SprWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
旧服务:
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Web.Services", "2.0.50727.3053")]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Web.Services.WebServiceBindingAttribute(Name="SprWebServiceRemoteBinding", Namespace="http://ws.hl7.trispark.com/")]
public partial class SprWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
并且使用的方法也不同:
新:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://ws.hl7.trispark.com/invoke", RequestNamespace="http://ws.hl7.trispark.com/", ResponseNamespace="http://ws.hl7.trispark.com/", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
public invokeResponse invoke(invoke inv) {
旧:
[System.Web.Services.Protocols.SoapDocumentMethodAttribute("", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Bare)]
[return: System.Xml.Serialization.XmlElementAttribute("invokeResponse", Namespace="http://ws.hl7.trispark.com/types")]
public invokeResponse invoke([System.Xml.Serialization.XmlElementAttribute("invoke", Namespace="http://ws.hl7.trispark.com/types")] invoke invoke1) {
首先我认为问题可能是我的版本是在vs2008中创建的,而旧版本是在vs2005中创建的,所以我在2005年重新创建了它,但这并没有改变任何内容。
问题是我没有旧代码,所以我看不出使用了哪些特定属性。
有没有人知道我必须设置哪些属性来获得相同的东西?
非常感谢!
答案 0 :(得分:1)
你有旧服务的DLL吗?如果您有DLL,那么如果它是.net服务,您可以使用Reflector对其进行反向工程。
答案 1 :(得分:0)
我的猜测是检查使用的命名空间,我遇到了类似的问题,并且深入研究了名称空间问题。检查:
[WebService(Namespace =“http://tempuri.org/”]
这是默认设置,可能在您的新网络服务中,您的旧网络服务可能正在使用其他名称空间。
答案 2 :(得分:0)
尝试比较两种服务的WSDL - 看看你是否能找到任何线索。
要获取它,请添加到网址?WSDL
的末尾,分别参见http://aspnet.15seconds.com/010430/SampleService.asmx和http://aspnet.15seconds.com/010430/SampleService.asmx?WSDL的示例。
编辑:
我不是WSDL大师,所以不能告诉你问题出在哪里
您可以考虑的另一个选择是比较请求的嗅探与服务 - 这可能提供其他线索。
答案 3 :(得分:0)
我意识到这是一个老问题,但如果您的目标是创建一个与旧服务器完全相同的Web服务器,那么您应该从旧服务器的WSDL中构建新服务器。您可以使用visual studio自动执行此操作:
http://bloggingabout.net/blogs/jschreuder/archive/2005/05/19/4124.aspx