【问题标题】:svcutil, WSDL, and the generated interfaces not being sufficient for implementationsvcutil、WSDL 和生成的接口不足以实现
【发布时间】:2011-02-03 02:21:47
【问题描述】:

我有一个 WSDL 文件,它定义了我必须在 WCF 中实现的服务。我读到我可以使用 WSDL 文件中的 svcutil 生成代理,然后我可以使用生成的接口来实现服务。

不幸的是,我似乎无法找到一种方法让接口包含正确的属性来公开合同。

所有操作都具有“OperationContractAttribute”属性,但似乎要公开服务,我需要为每个操作提供“OperationContract”。与“ServiceContractAttribute”和“ServiceContract”相同,我想是 DataContract,但我还没有走到那一步。

我可以手动进行这些更改,但我更喜欢一种可以轻松使用现有代码的技术,或者可以为我的使用生成更好的代码。有什么办法可以做到吗?

谢谢。

编辑:

Issue on Microsoft Connect

使用的命令:

svcutil ObjectManagerService.wsdl /n:*,Sample  /o:ObjectManagerServiceProxy.cs /nologo

代码示例:

public interface ObjectManagerSyncPortType
{

    // CODEGEN: Generating message contract since the operation createObject is neither RPC nor document wrapped.
    [System.ServiceModel.OperationContractAttribute(Action="http://www.sample.com/createObject", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute()]
    Sample.createObjectResponse1 createObject(Sample.createObjectRequest1 request);
    // ...
}

据我所知/看到 WSDL 文件是完全独立的,不需要额外的 XSD 文件。

【问题讨论】:

  • 请告诉我们您使用的命令行。此外,显示生成的代码示例。

标签: wcf interface wsdl code-generation svcutil.exe


【解决方案1】:

所以事实证明ReplyAction="*"culprit。不过感谢您的帮助。

【讨论】:

  • @chtmd:请您在 Connect 上报告这个问题,connect.microsoft.com/visualstudio?完成后,编辑此答案以包含 Connect 错误报告的链接,以便我们投票决定我们认为修复的重要性。
  • 我创建了问题并添加了上面的链接。
【解决方案2】:

我认为生成的代码没有任何问题,真的:

public interface ObjectManagerSyncPortType
{

    // CODEGEN: Generating message contract since the operation createObject is neither RPC nor document wrapped.
    [System.ServiceModel.OperationContractAttribute(Action="http://www.sample.com/createObject", ReplyAction="*")]
    [System.ServiceModel.XmlSerializerFormatAttribute()]
    Sample.createObjectResponse1 createObject(Sample.createObjectRequest1 request);

这是绝对、完全有效的代码 - 试试吧!我很确定它会运行。

所有操作都有 “操作合同属性” 属性,但看起来好像 为了暴露服务,我 需要“OperationContract” 每一个。

使用[OperationContract] 只是一个简写符号(这对于任何 .NET 属性都是真实有效且可使用的,真的——这里的WCF 属性没什么特别的)并且100% 等效到[OperationContractAttribute]。我没有发现任何问题。

【讨论】:

  • 似乎 (Action="sample.com/createObject", ReplyAction="*") 部分是把事情搞砸了,但我真的不明白为什么。如果我从界面中删除它,并且只有 [OperationContractAttribute],则在访问服务时该操作会在 WSDL 中正常显示,否则它不可见。
猜你喜欢
  • 2023-04-07
  • 1970-01-01
  • 2020-09-22
  • 1970-01-01
  • 2020-07-09
  • 2011-05-17
  • 2019-01-16
  • 1970-01-01
  • 2019-01-23
相关资源
最近更新 更多