svcutil,WSDL和生成的接口不足以实现

时间:2010-03-31 19:37:51

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

我有一个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文件。

2 个答案:

答案 0 :(得分:6)

事实证明ReplyAction="*"culprit。谢谢你的帮助。

答案 1 :(得分: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”   每一个。

使用[OperationContract]只是一个简写符号(对于任何 .NET属性来说都是真实有效的,实际上 - 这里没有关于WCF属性的特别之处)并且是100 %相当于[OperationContractAttribute]。我没有看到任何问题。