从WSDL生成的WCF服务无法使用相同的合同

时间:2013-05-27 21:19:35

标签: wcf wsdl svcutil.exe

我有 wsdl ,它是由工作网络服务的生成的JAX-WS RI ,但我无权访问该服务。

现在我想做的是,从我得到的wsdl创建自己的WCF服务。所以我可以在配置文件中切换url。

我使用 svcutil.exe 创建了服务界面。

svcutil my.wsdl my.xsd

一切似乎都没问题,直到我试图通过浏览器检查我的服务,我得到了:

操作X和Y具有相同的操作()。每项操作都必须具有唯一的操作值。

嗯......好的。我检查了界面并意识到,是的,代码生成器为每个操作赋予了相同的名称 - “”。

[System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")]

所以我用普通的[OperationContract]替换了所有这些linse,所有这些似乎都运行良好,直到我试图从客户端调用我的服务。在配置中我刚刚修改了端点地址。

我得到的例外是:由于EndpointDispatcher上的ContractFilter不匹配,无法在接收方处理带有Action''的消息

对我来说,似乎客户端正在请求没有名称的操作。工作服务如何知道要使用哪种操作?

如果我将新服务作为新服务引用添加,则一切正常。

我在这里缺少什么?

  

如何让WCF服务处理从中生成的同一合同?

编辑:

我做了一些调试。我提出了行动

[OperationContract(Action = "*", ReplyAction = "*")]
public object UnknownAction()
{
    return null;
}

当我向此操作添加断点时,我从OperationContext.Current.IncomingMessageHeaders.Action看到Action为空。消息正文虽然完全正确。

  

我需要在服务器端定义某种行为吗?

当前行为配置如下所示:

    <behavior name="svcBehavior">
      <serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
      <serviceDebug includeExceptionDetailInFaults="true" />
    </behavior>

EDIT vol2

当我创建asmx web服务并尝试从客户端调用web方法时,我得到 SoapException:服务器无法识别HTTP Header SOAPAction的值:。

0 个答案:

没有答案