WCF控制台应用程序支架
好的。 我有一些我想创建的WCF服务的概念性问题。 总之,我需要创建一个独立的Windows服务,为我提供远程处理功能(替换.NET 1.1远程处理应用程序)。
我目前了解他们的一些一般概念:
编辑:最好是创建一个Windows服务,然后打开OnStart()上的服务主机并在OnStop()中关闭它。 我可能会这样做,但我发现有一个令人困惑的事情是,我正在看的一些例子谈论编写一个简单的控制台应用程序与此机制....
这是目前的情况。 我们有一个接口,我将它称为IData,它实现了我们对SQL服务器的调用。 目前,我们在一个类中实现了IData,我将调用RemData,它具有基本的Execute_Query和Execute_NonQuery方法。
因此,IData看起来像:
[ServiceContract()]
public Interface IData
{
[OperationContract()]
int Execute_Query( parameter list....); // parameter list shouldn't be important here I hope.
[OperationContract()]
int Execute_NonQuery( parameter list....);
}
请注意,在我的接口定义中,我添加了WCF内容(服务合同和OperationContract)的属性。 这是我下面的一个问题的核心。
RemData实现IData。 我们将它作为DLL单独构建。
现在,我需要暗示WCF,所以我创建了一个控制台应用程序,并包含对包含我的接口IData的定义以及对RemData的DLL的引用的DLL的引用(是的,它们位于两个单独的程序集中)。
这是我的棘手部分。 我需要提供服务,所以我认为我可以这样做。 首先,我修改RemData类并添加System.ServiceModel作为参考,然后使用[ServiceBehavior()]属性修饰类,然后将[OperationBehavior()]属性添加到与我的界面匹配的每个方法。
这是一个很好的攻击计划吗?
如果我按照这个计划做,然后用[ServiceBehavior()]属性修饰类,然后用[OperationBehavior()]属性修饰类中的每个方法? 我甚至需要OperationBehavior属性吗? 不过,我很确定我需要ServiceBehavior属性。
然后这些会或多或少地匹配界面上的ServiceContract和OperationContract属性,对吗?
如果我在原始文件中有多个重载的Execute_Query()和Execute_NonQuery()方法(我会这样做)。 我知道如何使用OperationContract属性中的Name参数在界面中定义它们:
[ServiceContract()] public Interface IData {[OperationContract(Name =“Execute_QueryA”)] int Execute_Query(parameter list ....); //参数列表在这里我不希望是重要的。
[OperationContract(Name =“Execute_NonQueryA”)] int Execute_NonQuery(parameter list ....);
[OperationContract(Name =“Execute_QueryB”)] int Execute_Query(parameter list ....); //参数列表在这里我不希望是重要的。
[OperationContract(Name =“Execute_NonQueryB”)] int Execute_NonQuery(parameter list ....);
}
但是,我为实际实施做了什么? 我是否按照原样离开[OperationBehavior()]并且不向其中添加任何参数? 似乎没有名称参数。
我会很感激这方面的任何想法或者链接到优秀的文章,因为我没有发现超出基本内容的大量有用信息“嘿,我创建了一个在IIS中托管的单一调用WCF服务......”
谢谢。
你的计划很好,但你可能不需要用[OperationBehavior]来修饰每个方法实现,除非他们做了一些特殊的事情。
但是,你的重载需要有唯一的参数,否则你必须给它们不同的名字,例如:
[OperationContract()]
int Execute_NonQueryA( parameter list );
[OperationContract()]
int Execute_NonQueryB( parameter list);
OperationContract的name属性并不意味着对具有相同C#签名的方法进行多重覆盖,它只是意味着从调用者的角度重新命名该方法。
对于成为独立服务的控制台应用程序,我会建议Topshelf适合我。 另外这个关于动态加载WCF服务框架的codeproject.com文章也非常有效。 把它们放在一起是我会采取的方法。
链接地址: http://www.djcxy.com/p/62573.html