创建Web服务

时间:2010-01-05 11:21:47

标签: c# soap web-services reference

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年重新创建了它,但这并没有改变任何内容。

问题是我没有旧代码,所以我看不出使用了哪些特定属性。

有没有人知道我必须设置哪些属性来获得相同的东西?

非常感谢!

4 个答案:

答案 0 :(得分:1)

你有旧服务的DLL吗?如果您有DLL,那么如果它是.net服务,您可以使用Reflector对其进行反向工程。

答案 1 :(得分:0)

我的猜测是检查使用的命名空间,我遇到了类似的问题,并且深入研究了名称空间问题。检查:

[WebService(Namespace =“http://tempuri.org/”]

这是默认设置,可能在您的新网络服务中,您的旧网络服务可能正在使用其他名称空间。

答案 2 :(得分:0)

尝试比较两种服务的WSDL - 看看你是否能找到任何线索。

要获取它,请添加到网址?WSDL的末尾,分别参见http://aspnet.15seconds.com/010430/SampleService.asmxhttp://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