/// <summary>
/// T4WcfHelper,创建Wcf服务客户端辅助类。
/// </summary>
public static class T4WcfHelper
{
/// <summary>
/// CreateWcfClient,
/// 利用配置文件[ServiceReferences.ClientConfig]并合理替换其服务地址,创建创建Wcf服务客户端。
/// 注:替换配置文件【终结点[Endpoint]】中的【主机(host)和端口(port)】为xap包所在的【主机(host)和
/// 端口(port)】后,创建Wcf服务客户端。从而,达到免去发布Silverlight应用时手动修改配置文件的目地。
/// </summary>
/// <typeparam name="TServiceClient"></typeparam>
/// <returns></returns>
public static TServiceClient CreateWcfClient<TServiceClient>()
where TServiceClient : class,new()
{
var BdFlag = BindingFlags.Instance | BindingFlags.Public | BindingFlags.IgnoreCase;
var ClientInst = new TServiceClient();
var EndpointProp = ClientInst.GetType().GetProperty("Endpoint", BdFlag);
var EndpointValue = EndpointProp.GetValue(ClientInst, null) as ServiceEndpoint;
var UbCfg = new UriBuilder(EndpointValue.Address.Uri);
var UbHost = new UriBuilder(Application.Current.Host.Source.AbsoluteUri);
UbCfg.Host = UbHost.Host; UbCfg.Port = UbHost.Port;
EndpointValue.Address = new EndpointAddress(UbCfg.Uri, EndpointValue.Address.Headers.ToArray());
return ClientInst;
}
/// <summary>
/// ChangeWcfAddressToXap。
/// 将Wcf服务客户端地址修改为参照xap文件的地址。
/// </summary>
/// <typeparam name="TChannel"></typeparam>
/// <param name="Src"></param>
public static void ChangeWcfAddressToXap<TChannel>(this ClientBase<TChannel> Src)
where TChannel : class
{
var EndpointValue = Src.Endpoint;
var UbCfg = new UriBuilder(EndpointValue.Address.Uri);
var UbHost = new UriBuilder(Application.Current.Host.Source.AbsoluteUri);
UbCfg.Host = UbHost.Host; UbCfg.Port = UbHost.Port;
Src.Endpoint.Address = new EndpointAddress(UbCfg.Uri, EndpointValue.Address.Headers.ToArray());
}
}
/// <summary>
/// T4WcfHelper,测试T4WcfHelper。
/// </summary>
public class TestT4WcfHelper
{
/// <summary>
/// 测试CreateWcfClient。
/// </summary>
private static void TestCreateWcfClient()
{
// 假设:应用程序主目录
// 1.1)开发调试时为:http://localhost:1352/TestApp.Web/
// 1.2)发布应用时为:http://www.TestSite.com/TestApp.Web/
// 要求:Service1Client服务地址
// 2.1)开发调试时为:http://localhost:1352/TestApp.Web/Services/Service1.svc
// 2.2)发布应用时为:http://www.TestSite.com/TestApp.Web/Services/Service1.svc
// 1)依赖[ServiceReferences.ClientConfig]配置文件中服务地址,创建服务端。
// Svc1中的地址将为[2.1)],不符合要求。
var Svc1 = new ServiceReference1.Service1Client();
// 1)替换[ServiceReferences.ClientConfig]配置文件中服务地址,创建服务端。
// Svc2中的地址将为[2.2)],符合要求,这是符合要求的方法1。
var Svc2 = T4WcfHelper.CreateWcfClient<ServiceReference1.Service1Client>();
// 3)替换[ServiceReferences.ClientConfig]配置文件中的服务地址,创建服务端。
// Svc3中的地址将为[2.2)],符合要求,这是符合要求的方法2。。
var Svc3 = new ServiceReference1.Service1Client(); Svc3.ChangeWcfAddressToXap();
}
}