今天我有一个关于 WCF 通信风格的问题。
我有时会拒绝一点,所以以编程方式使用东西(想要控制自己)而且我不喜欢巨大的东西。有时需要两个程序部分之间的通信,有时在同一台机器上,有时在网络上。
所以我尝试以编程方式使用 WCF,而不是使用配置文件、svcutil 等。
如果我使用以下内容:
a) 定义合同
[ServiceContract]
public interface IMyContract
{
[OperationContract]
bool DoSomething(string something_in);
}
b) 编写一些代码
public class MySomething: IMyContract
{
public bool DoSomething(string something_in)
{
if(String.IsNullOrEmpty(something_in)
return false;
return true;
}
}
然后以编程方式托管它
Uri baseAddress = new Uri("net.tcp://localhost:48080/MySimpleService");
using (ServiceHost host = new ServiceHost(typeof(MyContract), baseAddress))
{
host.AddServiceEndpoint(typeof(IMyContract), new NetTcpBinding(), "");
host.Open();
Console.WriteLine("<Enter> to stop the service.");
Console.ReadLine();
host.Close();
然后从另一个程序中使用它:
var binding = new NetTcpBinding();
var endpoint = new EndpointAddress("net.tcp://localhost:48080/MySimpleService");
var channelFactory = new ChannelFactory<IMyContract>(binding, endpoint);
IMyContract client = null;
try
{
client = channelFactory.CreateChannel();
bool test = client.DoSomething();
((ICommunicationObject)client).Close();
}
catch (Exception ex)
{
if (client != null)
{
((ICommunicationObject)client).Abort();
}
}
有什么缺点?
不是更容易理解吗?
这样的事情会引起其他问题吗?
(我对此最感兴趣,因为我认为使用 svcutil 非常烦人,所以一个只是因为类更改,如果 wcf 服务仅用于自己程序的 cumminication,则可以简单地手动处理)那又如何我失踪了吗?
手动处理大型未读 XML 文件只是一种糟糕的风格吗?