今天我有一个关于WCF通信风格的问题.
我有时拒绝一点,所以以编程方式使用东西(想要控制自己),我不喜欢巨大的.有时需要在两个程序部件之间进行通信,有时在同一台机器上,有时在网络上.
所以我尝试以编程方式使用WCF,而不是使用配置文件,svcutil等.
如果我使用以下内容:
a)定义合同
[ServiceContract]
public interface IMyContract
{
[OperationContract]
bool DoSomething(string something_in);
}
Run Code Online (Sandbox Code Playgroud)
b)编程一些代码
public class MySomething: IMyContract
{
public bool DoSomething(string something_in)
{
if(String.IsNullOrEmpty(something_in)
return false;
return true;
}
}
Run Code Online (Sandbox Code Playgroud)
然后以编程方式托管它
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();
Run Code Online (Sandbox Code Playgroud)
然后从另一个程序中消耗它:
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();
}
}
Run Code Online (Sandbox Code Playgroud)
会有什么缺点?
理解不是更容易吗?
这样的事情会引起其他问题吗?
(我最感兴趣的是,因为我认为使用svcutil非常烦人,所以只是因为类更改,可以简单地手动处理,如果wcf服务仅用于自己的程序的累计)那么什么我错过了吗?
使用大型未读XML文件手动执行操作只是一种不好的风格吗?
您的问题可以分为多个部分:
硬编码地址可以吗?
不。以同样的方式,我们不硬编码连接字符串,我们也不硬编码资源或服务的路径(至少不是绝对路径)。您永远不知道何时需要出于任何原因更改它 - 例如测试服务的新版本。如果您不想使用完整的端点配置,请至少使用简单的应用程序设置。
可以硬编码绑定和配置吗?
如果您不希望经常更改它,并且每次更改时都愿意重新编译和重新部署服务器和客户端,则可以对其进行硬编码。API 提供此功能是因为它是有效的用例。
客户端和服务器之间可以共享服务契约和数据契约吗?
同样,这取决于您期望应用程序增长的方式以及您期望部署的复杂性。如果您可以完全控制客户端和服务器代码,则共享程序集是有效的用例,但您必须记住,它会在服务器和客户端应用程序之间引入紧密耦合。Svcutil 是一个工具,可帮助您从您无法控制的 SOAP 服务(您没有它们的代码或它们不是用 .NET 编写)或您想要与服务器松散耦合的客户端生成客户端。
我自己经常使用带有共享合约程序集的配置=没有 svcutil。
编辑:
无论如何,与 XML 配置相比,编码配置没有技术缺陷(某些高级配置甚至在 XML 中不可用)。如果开发人员了解 WCF,他就会理解 XML 和代码。如果开发人员不了解 WCF,他可能会对代码更满意,因为 XML 配置可能对他隐藏一段时间。
| 归档时间: |
|
| 查看次数: |
467 次 |
| 最近记录: |