如何从Windows服务访问WCF RIA服务?

时间:2010-05-09 23:53:17

标签: c# soap wcf-ria-services

我有一个正常运行的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,文化=中立,   公钥= 31bf3856ad364e35' 。

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

有人可以让我知道我应该怎么做吗?我无法相信在Silverlight应用程序之外的其他东西中简单地使用WCF RIA服务应该很难!

4 个答案:

答案 0 :(得分:4)

而不是......

  

System.ServiceModel.DomainServices.Hosting

使用程序集......

  

Microsoft.ServiceModel.DomainServices.Hosting

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

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

答案 1 :(得分:2)

您是否尝试过执行

  

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

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

SOAP和JSON端点是必需的

答案 2 :(得分:1)

SoapXmlEndpointFactory类是

的一部分
  

Microsoft.ServiceModel.DomainServices.Hosting

程序集,包含在Silverlight Toolkit中。

请参阅here

答案 3 :(得分:1)

<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非常重要