【问题标题】:How to access WCF RIA service from Windows Service?如何从 Windows 服务访问 WCF RIA 服务?
【发布时间】:2011-02-17 11:35:57
【问题描述】:

我有一个正常运行的 Silverlight 4 应用程序(VS2010、SL4、WCF RIA,使用 Cassini 托管在我的开发盒上,64 位 Windows 7)。在 ClientBin 目录中,我有一个描述我的服务的 .svc 文件:

<% @ServiceHost Service="MyApp.Services.MyService 
Factory="System.ServiceModel.DomainServices.Hosting.DomainServiceHostFactory" %>

当我浏览到 http://localhost:52878/ClientBin/MyApp-Services-MyService.svc 时,我看到以下内容:

您已创建服务。去测试 此服务,您需要创建 一个客户端并使用它来调用 服务。您可以使用 命令行中的 svcutil.exe 工具 使用以下语法: svcutil.exe http://localhost:52878/ClientBin/MyApp-Services-MyService.svc?wsdl

我想从 Windows 服务应用程序访问该服务。我的理解是我需要启用 SOAP 端点才能实现这一点。因此,我将以下内容添加到我的 web.config 文件中:

<domainServices>
  <endpoints>
    <add name="soap" 
        type="System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory, 
        System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, 
        Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
  </endpoints>
</domainServices>

首先,Intellisense 抱怨标签的存在,说:

元素 system.ServiceModel 有 无效的子元素 domainServices。

其次,上述 Silverlight 应用程序停止工作,可能是因为此更改破坏了底层 Web 服务。

第三,看起来 System.ServiceModel.DomainServices.Hosting 程序集实际上并不包含 SoapXmlEndpointFactory 类型;如果我在将以上内容添加到 web.config 后尝试浏览服务,我会看到:

无法加载类型 'System.ServiceModel.DomainServices.Hosting.SoapXmlEndpointFactory' 从组装 'System.ServiceModel.DomainServices.Hosting, 版本=4.0.0.0,文化=中性, PublicKeyToken=31bf3856ad364e35'。

如果我使用 Reflector 检查程序集,我发现它包含 DomainServiceEndpointFactory 和 PoxBinaryEndpointFactory 类型,但没有 SoapXmlEndpointFactory。

有人可以告诉我应该怎么做吗?我不敢相信在 Silverlight 应用程序之外的其他东西中简单地使用 WCF RIA 服务会这么难!

【问题讨论】:

  • SL 论坛 (forums.silverlight.net/forums/p/180880/409333.aspx) 的一些建议包括在 System.ServiceModel.DomainServices.Hosting 程序集上将 Copy Local 设置为 true(不起作用,因为问题是缺少指定的类型来自该程序集)并确保已安装 .NET Framework 4.0。

标签: c# soap wcf-ria-services


【解决方案1】:

你试过只执行吗

svcutil.exe http://localhost:52878/ClientBin/MyApp-Services-MyService.svc?wsdl

或者,您是否安装了 RIA 服务工具包? http://www.microsoft.com/downloads/details.aspx?FamilyID=7b43bab5-a8ff-40ed-9c84-11abb9cda559&displaylang=en

SOAP 和 JSON 端点需要它

【讨论】:

  • 我安装了 RIA 服务工具包(来自 microsoft.com/downloads/…),更改了 domainServices 声明以使用正确的命名空间和程序集,现在它可以工作了。谢谢!
【解决方案2】:

SoapXmlEndpointFactory 类是

的一部分

Microsoft.ServiceModel.DomainServices.Hosting

程序集,包含在 Silverlight 工具包中。

here

【讨论】:

    【解决方案3】:

    而不是...

    System.ServiceModel.DomainServices.Hosting

    使用程序集...

    Microsoft.ServiceModel.DomainServices.Hosting

    来自 WCF RIA 服务工具包。它包含SoapXmlEndpointFactory 类型。

    默认位置是...%Program Files%\Microsoft SDKs\RIA Services\v1.0\Toolkit\Libraries\Server

    【讨论】:

    • 谢谢!我花了一段时间才看到这两个 DLL 之间的区别。
    【解决方案4】:
    <sectionGroup name="system.serviceModel">
      <section name="domainServices" type="System.ServiceModel.DomainServices.Hosting.DomainServicesSection, System.ServiceModel.DomainServices.Hosting, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" allowDefinition="MachineToApplication" requirePermission="false" />
    </sectionGroup>
    

    在 ConfigSections 中声明。正确包含 sectionGroup 很重要

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-22
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 2011-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多