3

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

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

所有操作都有“OperationContractAttribute”属性,但看起来好像要公开服务,我需要每个操作都有“OperationContract”。与“ServiceContractAttribute”和“ServiceContract”相同,我想象 DataContract,但我还没有走到那一步。

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

谢谢。

编辑:

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 文件。

4

2 回答 2

6

所以原来那ReplyAction="*"罪魁祸首。不过感谢您的帮助。

于 2010-04-01T19:06:35.007 回答
1

我没有看到生成的代码有任何问题,真的:

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);

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

所有操作都有“OperationContractAttribute”属性,但看起来好像要公开服务,我需要每个操作都有“OperationContract”。

Using[OperationContract]只是一个简写符号(它是真实有效的,可用于任何.NET 属性,真的 - 这里的 WCF 属性没有什么特别之处)并且 100% 等同于[OperationContractAttribute]. 我在那里看不到任何问题。

于 2010-03-31T20:39:43.347 回答