wcf webservice服务
1.建一个类库Constracts,在内写接口:
[ServiceContract(Name = "USService", Namespace = "http://www.new.net/")]
public interface IUSInfoServices
{
//获取高管信息
[OperationContract]
string GetLeaderInfo(string symbol);
}
2.再建一个类库Services,在里面写实现接口的方法:
1)添加引用,添加Constracts的引用
2)实现接口:
/// <summary>
/// 获取高管信息
/// </summary>
/// <param name="code">公司代码</param>
/// <returns>返回一个json对象</returns>
public string GetLeaderInfo(string symbol)
{
//获取高管信息的路径
XElement ele = XElement.Load("path.xml");
string path = ele.Element("leader").Value;
//首次读取缓存
string jsoncache = HttpRuntime.Cache.Get(symbol) as string;
if (jsoncache == null || jsoncache.Equals(""))
{
//读取数据
XmlDocument doc = new XmlDocument();
doc.Load(path);
string strSearch = "root/高管信息[@代码='" + symbol + "']";
XmlNode searchNode = doc.SelectSingleNode(strSearch);
XmlElement element = (XmlElement)searchNode;
xmltoJson json = new xmltoJson();
jsoncache = json.XmlToJSON(element);
//加缓存
HttpRuntime.Cache.Insert(symbol, jsoncache, null, DateTime.UtcNow.AddMinutes(2), System.Web.Caching.Cache.NoSlidingExpiration);
}
return jsoncache;
}
3.然后再建一个控制台应用程序Hosting:
1).添加引用,添加Constracts,services的引用
2).添加命名空间System.ServiceModel;
3). 在 static void Main(string[] args)
{
using (ServiceHost host = new ServiceHost(typeof(USInfoServices)))
{
host.Opened += delegate
{
Console.WriteLine("USInfoServices已经启动,按任意键终止服务!");
};
host.Open();
Console.Read();
}
}
4).在Hosting中添加一个配置文件App.config:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/><!--启用asp.net兼容模式-->
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="metadataBehavior" name="Genesysinfo.USServices.Services.USInfoServices">
<endpoint address="" binding="basicHttpBinding" contract="Genesysinfo.USServices.Contracts.IUSInfoServices" />
<endpoint address="" binding="netTcpBinding" contract="Genesysinfo.USServices.Contracts.IUSInfoServices" />
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:8181/usinfoservices" />
<add baseAddress="net.tcp://127.0.0.1:8000/usinfoservices" />
</baseAddresses>
</host>
<endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
</service>
</services>
</system.serviceModel>
</configuration>
4.再添加一个控制台应用程序Client:
1).运行Hosting.exe。如果权限过低,就用以管理员的身份打开。
2).点击右键,添加服务器引用。地址就是app.config中的地址(即http://127.0.0.1:8181/usinfoservices).
3).在
static void Main(string[] args)
{
using (USServiceClient usserviceinfo = new USServiceClient("BasicHttpBinding_USService"))
{
string leader= usserviceinfo.GetLeaderInfo("A");
Console.Write(leader);
Console.Read();
}
}
4).运行Client。