作为ASMX和WCF服务
我有一个现有的Web服务(ASMX)需要作为WCF公开。 ASMX必须保持并且最好不改变客户端。根据this我已经配置如下。服务层由CodeSmith生成,虽然我没有写这些服务,但我知道他们很好,因为他们已经在野外使用了很多年。名称已经改变,以保护无辜的..咧嘴笑。作为ASMX和WCF服务
在服务层存在由CodeSmith中产生的XXX.YYY.MyService
类,这是双饰
[ServiceContract(Namespace = "http://XXX.YYY")]
和
[WebService(Namespace = "http://XXX.YYY", Name = "MyService")]
我也创建一个空的接口XXX.YYY.IMyService
其通过MyService
实现。在这一点上,我可以使用ASMX服务而没有任何问题。
现在我添加一个.svc文件,其包含了服务层...
<%@ ServiceHost Language="C#" Debug="true" Service="XXX.YYY.MyService" %>
...我配置服务层的web.config与...
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="MyServiceBehavior" name="XXX.YYY.MyService">
<endpoint binding="basicHttpBinding" contract="XXX.YYY.IMyService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
如果我编译并尝试在Visual Studio 2010中为该服务创建服务引用,则我会看到.ASMX和.SVC版本为MyService
。在“添加服务引用”对话框中展开.svc分支会导致引用空白XML文档的错误。
如果我检查事件日志中我得到...
虚拟主机提供商无法处理请求。 发件人信息:System.ServiceModel.ServiceHostingEnvironment + HostingManager/39449526 异常:System.ServiceModel.ServiceActivationException:由于编译期间出现异常,无法激活服务'/System/MyService.svc'。异常消息是:合同名称“XXX.YYY.IMyService”无法通过该服务“为MyService”执行合同的列表中找到.. --->
...但MyService
标为实现IMyService
...
public partial class MyService : IMyService
我也试图改变该服务的合同属性MyService
,而不是接口。这有效,但对于客户端代码中断,因为任何尝试创建服务实例都失败,因为它现在是一个接口。
我希望这是有道理的。请随时提出任何额外的问题。我试图尽可能详细。
(没有涉及IIS ..这纯粹是在Visual Studio 2010中)。
谢谢。
我的答案是将[ServiceContract]和[OperationContract]声明移至界面。这已经解决了我的问题。
HTH。
你的代码实现了IMyService,你确定它是XXX.YYY.IMyService。