我有两个C# (.NET v4.0) 伴侣项目,一个是ASP.NET网站,另一个是“自托管”的WCF控制台应用程序。网站代码调用WCF服务执行各种任务;这两个项目都是几年前编写的,一直运行良好。
控制台应用程序和网站共享一个公共类库 (在这个例子中称为
控制台应用程序非常简单 - 例如,我有
我无法确定出了什么问题。我看到其他帖子提到了这个错误,但他们都提到要确保引用的类是相同的——WCF应用程序使用与我在上面用svcutil调用的MyLibrary中相同的代码;两者同时编译。此外,我没有做任何不同于以前做过的事情。
有人能建议从哪里开始排除故障吗?如果我在代码示例中进行混淆时弄乱了语法,请提前谅解 :)
控制台应用程序和网站共享一个公共类库 (在这个例子中称为
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应用程序使用与我在上面用svcutil调用的MyLibrary中相同的代码;两者同时编译。此外,我没有做任何不同于以前做过的事情。
有人能建议从哪里开始排除故障吗?如果我在代码示例中进行混淆时弄乱了语法,请提前谅解 :)