WCF服务参考 - 重用类型时不生成代理

时间:2014-08-08 15:48:32

标签: c# .net wcf

我有两个C#(.NET v4.0)配套项目,一个ASP.NET网站和一个“自托管”WCF控制台应用程序。网站代码为各种事情调用WCF服务;两者都写在几年前,并且一直很好。

控制台应用程序和网站都在它们之间共享一个公共类库(在本例中称为MyLibrary);这被添加为两个项目的参考。

控制台应用非常简单 - 例如,我有IService.cs

[ServiceContract]
public interface IService
{               
    [OperationContract]
    List<MyLibrary.MyClass> DoSomething(int ID);
}

然后Service.cs

public class Service : IService
{
    public List<MyLibrary.MyClass> DoSomething(int ID)
    {
        // etc
        return result;
    }
}

......所有这一切都有效。但是,今天我需要向双方添加一些微不足道的东西 - 其中一种方法需要添加另一个参数。我已经更新了WCF应用程序,构建它,运行它,然后去了网站并尝试“更新服务参考”。

此时,该网站破了:生成服务引用不再创建代理。但是,如果我取消选择“重用所有引用”选项,则会创建代理:这会大量破坏我的代码,但我需要通过代码共享对MyLibrary的引用。

在进行一些挖掘后,我尝试使用svcutil

创建引用

svcutil /t:code http://localhost/MyService /r MyLibrary.dll

抛出错误:

Attempting to download metadata from 'http://localhost/MyService' using WS-Metadata Exchange or DISCO. Error: Cannot import wsdl:portType Detail: An exception was thrown while running a WSDL import extension: System.ServiceModel.Description.DataContractSerializerMessageContractImporter    
Error: Referenced type 'MyLibrary.MyClass, MyLibrary, Version=2.0.53
33.26816, Culture=neutral, PublicKeyToken=null' with data contract name 'MyLibrary.MyClass' in namespace 'http://schemas.datacontract.org/2004/07/MyService' cannot be used since it does not match imported DataContract. Need to exclude this type from referenced types.    
XPath to Error Source: //wsdl:definitions[@targetNamespace='http://tempuri.org/']/wsdl:portType[@name='IService']

我无法弄清楚出了什么问题;我已经看到有关此错误的其他帖子,但他们都提到确保引用的类是相同的 - WCF应用程序使用MyLibrary中的相同代码,因为我正在使用上面的svcutil调用;两者都在同时编译。此外,我没有采取任何不同的方式,而我之前没有做过几十次。

有人可以建议从哪里开始解决此问题吗?如果我在混淆期间修改了代码示例中的任何语法,请提前道歉:)

1 个答案:

答案 0 :(得分:2)

我无意中偶然发现了答案:如果我取消选中&#34;始终生成邮件合同&#34;选项,然后&#34;更新服务参考&#34;,一切都恢复正常。

image

我确定我应该真正使用DataContract(正如我在OP上的评论中提到的那样),但是我会快速取胜并将我的无知隐藏一天!