出现问题:WCF RIA DomainService与Net.Tcp Binding/Net.pipeBinding等非Htttp绑定无法兼容
中文描述:提供的URI方案"net.tcp"无效,应为"http";
英文描述:The provided URI scheme 'net.tcp' is invalid; expected 'http'. Parameter name: context.ListenUriBaseAddress
问题原因:
(1)http://www.cnblogs.com/2018/archive/2010/10/25/1860746.html
(3)http://forums.silverlight.net/forums/p/208892/493804.aspx#493804
解决方法1:
(1)在web服务端,创建类MyDomainServiceHostFactory
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.ServiceModel.DomainServices.Hosting;
namespace WMOS.Web
{
public class MyDomainServiceHostFactory : DomainServiceHostFactory
{
private static List<string> _allowedSchemes;
static MyDomainServiceHostFactory()
{
MyDomainServiceHostFactory._allowedSchemes = new List<string>();
MyDomainServiceHostFactory._allowedSchemes.Add(Uri.UriSchemeHttp);
MyDomainServiceHostFactory._allowedSchemes.Add(Uri.UriSchemeHttps);
}
protected override ServiceHost CreateServiceHost(Type serviceType, Uri[] baseAddresses)
{
baseAddresses = baseAddresses.Where(uri => MyDomainServiceHostFactory._allowedSchemes.Contains(uri.Scheme)).ToArray();
return base.CreateServiceHost(serviceType, baseAddresses);
}
}
}
(2) 以例子工程中WMOSDomainService为例,注意这个服务的类型是:RIA domainService,在web.config配置文件配置如下
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" >
<serviceActivations>
<add service="WMOS.RIAService.Web.WMOSDomainService" relativeAddress="Services/WMOS-RIAService-Web-WMOSDomainService.svc" factory="WMOS.Web.MyDomainServiceHostFactory"/>
</serviceActivations>
</serviceHostingEnvironment>
解决方法2:
或者还可以按照如下方法做,第一步相同,第二步操作
(1)web服务端,创建扩展名是.svc的WCF服务文件,WCF服务是:WMOS.RIAService.Web.WMOSDomainService,文件命名应当把“.”用“-”代替,例如:WMOS-RIAService-Web-WMOSDomainService.svc,严格按照这个规则命名。
(2)文件内容如下
<%@ ServiceHost Language="C#" Debug="true" Service="WMOS.RIAService.Web.WMOSDomainService" Factory="WMOS.Web.MyDomainServiceHostFactory" %>
注:不兼容的问题就出在Factory上。
附:
(1)Silverlight4 配置WCF net.tcp绑定宿主在IIS时应注意的几个问题
(2)WCF NET.TCP Protocol in Silverlight
(3)当Silverlight同时遇上TCP和HTTP的WCF服务
更新:
最新版本的RIA已经解决此问题,升级版本即可