【发布时间】:2011-07-17 06:42:49
【问题描述】:
我有一个现有的 Web 服务 (ASMX),它也需要作为 WCF 公开。 ASMX 必须保留,最好不要在客户端上进行更改。根据this,我配置如下。服务层是用 CodeSmith 生成的,虽然我没有编写这些服务,但我知道它们很好,因为它们已经在野外使用了很多年。名称已更改以保护无辜.. 咧嘴笑。
在服务层有一个由 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 中对服务进行服务引用,我会看到 MyService 的 .ASMX 和 .SVC 版本。在“添加服务引用”对话框中展开 .svc 分支会导致引用空 XML 文档时出错。
如果我检查事件日志,我会得到...
WebHost 未能处理请求。 发件人信息:System.ServiceModel.ServiceHostingEnvironment+HostingManager/39449526 异常:System.ServiceModel.ServiceActivationException:由于编译期间出现异常,无法激活服务“/System/MyService.svc”。异常消息是:在服务'MyService'实现的合同列表中找不到合同名称'XXX.YYY.IMyService'.. --->
...但是MyService 被标记为实现IMyService ...
public partial class MyService : IMyService
我还尝试将服务的合同属性更改为MyService 而不是接口。这可行,但客户端代码会中断,因为任何创建服务实例的尝试都会失败,因为它现在是一个接口。
我希望这是有道理的。请随时提出任何额外的问题。我已经尽量详细了。
(不涉及 IIS .. 这纯粹是在 Visual Studio 2010 中)。
谢谢。
【问题讨论】: