让WCF只需要配置服务地址

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Reflection;

using System.ServiceModel;

using System.Configuration;

using System.ServiceModel.Description;

namespace NHG.BFP.Framework.Host

{

internal class FramworkHostService

{

private System.Reflection.Assembly assmbly = null;

private string serviceAddress = string.Empty;

public void HostStartServer(string serviceAddress)

{

this.serviceAddress = serviceAddress;

string strService = "NHG.BFP.Framework.Service";

string strContract = "NHG.BFP.Framework.Contract";

if (string.IsNullOrEmpty(strService) || string.IsNullOrEmpty(strContract))

{

NHG.BFP.Common.Log.Logger.PrintText("配置文件错误");

Console.ReadKey();

}

NHG.BFP.Common.Log.Logger.PrintText("开始启动基础框架服务");

assmbly = System.Reflection.Assembly.Load(strService);

System.Reflection.Assembly asm = System.Reflection.Assembly.Load(strContract);

if (assmbly != null && asm != null)

{

Type[] tContracts = asm.GetTypes();

if (tContracts != null && tContracts.Length > 0)

{

foreach (Type item in tContracts)

{

Type tService = GetTypeByFace(item) as Type;

if (tService == null) continue;

Uri httpBaseAddress = new Uri(string.Format("{0}/{1}", serviceAddress, item.Name));

ServiceHost serviceHost = new ServiceHost(tService, httpBaseAddress);

{

BasicHttpBinding httpBinding = new BasicHttpBinding();

serviceHost.AddServiceEndpoint(item, httpBinding, string.Empty);

ServiceMetadataBehavior areaBehavior = serviceHost.Description.Behaviors.Find<ServiceMetadataBehavior>();

{

if (areaBehavior == null)

{

areaBehavior = new ServiceMetadataBehavior();

areaBehavior.HttpGetEnabled = true;

serviceHost.Description.Behaviors.Add(areaBehavior);

}

else

{

areaBehavior.HttpGetEnabled = true;

}

}

serviceHost.Opened += delegate

{

NHG.BFP.Common.Log.Logger.PrintText(tService.Name + " 服务启动成功");

};

serviceHost.Open();

}

}

NHG.BFP.Common.Log.Logger.PrintText("基础框架服务启动完成", true);

}

}

}

private object GetTypeByFace(Type interfaceType)

{

object obj = null;

if (assmbly != null)

{

Type[] tServices = assmbly.GetTypes();

if (tServices != null && tServices.Length > 0)

{

foreach (var type in tServices)

{

bool bExist = false;

foreach (var item in type.GetInterfaces())

{

if (item == interfaceType)

{

obj = type;

bExist = true;

break;

}

}

if (bExist) break;

}

}

}

return obj;

}

}

}

时间: 2024-10-14 16:52:21

让WCF只需要配置服务地址的相关文章

WCF基础之配置服务

在WCF应用编程中配置服务是其主要部分. 配置可以定义和自定义如何向客户端公开服务,包括服务地址,发送和接受消息的传输和编码,以及服务的安全类型. 服务的配置有两种:编码和使用config文件,大多数是用配置文件进行配置. <system.serviceModel> <!--服务--> <services> <service> <host /> <endpoint/> </service> </services>

WCF 配置服务 (02)

配置服务概述 • 在设计和实现服务协定后,即可配置服务. 在其中可以定义和自定义如何向客户端公开服务,包括指定可以找到服务的地址.服务用于发送和接收消息的传输和消息编码,以及服务需要的安全类型. • 配置服务的类型 – 使用配置文件配置 –  在代码中强制配置 • 实际上,编写配置是 WCF 应用程序编程的主要部分. • 使用配置文件配置WCF服务 – 通过使用配置文件配置 Windows Communication Foundation(WCF) 服务,可提供在部署时而非设计时提供终结点和服务

使用C#创建及调用WCF完整实例 (Windows服务宿主)

关于WCF的概念.原理.优缺点等,在这里就不多说了,网上很多,可以自行搜索,比我解释的要专业的多. 这里直接说使用Windows 服务(Windows Service)作为宿主如何实现,其它方式不在此次教程之内 文章最后有本例的下载连接,包含源代码.说明教程.编译后文件 实例环境:Windows Server 2008 R2 + VS 2010(C#) 打开 VS 2010,选择 新建项目,选择 ”WCF”|”WCF 服务库 ”,注意这里是”WCF 服务库 ”,不是"WCF 服务应用程序&quo

[老老实实学WCF] 第二篇 配置WCF

原文:[老老实实学WCF] 第二篇 配置WCF 老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; name

老老实实学习WCF[第二篇] 配置wcf

老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; name

跟我一起学WCF(5)——深入解析服务契约[上篇]

一.引言 在上一篇博文中,我们创建了一个简单WCF应用程序,在其中介绍到WCF最重要的概念又是终结点,而终结点又是由ABC组成的.对于Address地址也就是告诉客户端WCF服务所在的位置,而Contract又是终结点中比较重要的一个内容,在WCF中,契约包括服务契约.数据契约.消息契约和错误契约,在本篇博文将解析下数据契约的内容,关于其他三种契约将会后面的博文中陆续介绍. 二.引出问题——WCF操作重载限制 C#语言是支持操作重载的,然而在WCF实现操作重载有一定的限制.错误的操作重载实例:

(转)[老老实实学WCF] 第二篇 配置WCF

第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; namespace Hel

(转)[老老实实学WCF] 第二篇 配置WCF

在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: [csharp] view plaincopy using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ServiceModel; using System.ServiceModel.Description; namespace HelloWCFServi

【WCF系列】(四)WCF客户端怎么消费服务

WCF客户端怎么消费服务 获取服务绑定协议.绑定和地址:实现方式 SvcUtil方式:SvcUtil.exe是一个命令行工具,位于:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin可以将SvcUtil.exe添加到VS中方便以后的运用 生成代理类: svcutil net.tcp://192.168.0.100:3333/ChatService /language:C# /out:proxy.cs /config:app.config