例如
// Create a ServiceHost for the Service type and
// provide the base address.
mServiceHost = new ServiceHost(typeof(T));
// Open the ServiceHostBase to create listeners and start
// listening for messages.
mServiceHost.Open();
在这种情况下,T是TransactionProcessingService。
到目前为止,我收到了app config的错误,不知道应该如何修改它:
服务 “TransactionProcessingWindowsService.TransactionProcessingService`1 [[Common.TransactionProcessing, Common,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'has 零应用(非基础设施)端点。这可能是因为 找不到您的应用程序的配置文件,或者没有找到 匹配服务名称的服务元素可以在 配置文件,或者因为没有定义端点 服务要素。
以下是我尝试设置配置的方法
<service name="TransactionProcessingWindowsService.TransactionProcessingService<TransactionProcessingWindowsService.TransactionProcessing>"
behaviorConfiguration="TransactionProcessingServiceBehavior">
<host>
<baseAddresses>
<add baseAddress="http://localhost:8000/TransactionProcessingService/service"/>
</baseAddresses>
</host>
<endpoint address=""
binding="wsHttpBinding"
contract="TransactionProcessingWindowsService.ITransactionProcessingService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
</service>
由于
答案 0 :(得分:1)
异常详细信息显示应使用的服务名称。试试这个:
<service name="TransactionProcessingWindowsService.TransactionProcessingService`1[[Common.TransactionProcessing, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
behaviorConfiguration="TransactionProcessingServiceBehavior">
但这并不酷,因为每次更改程序集版本或签名时都需要更新配置文件。
答案 1 :(得分:0)
您的配置文件具有ITransactionProcessingService的端点,但不包含TransactionProcessingService的端点。
因为你使用的是泛型,所以T可以是任何东西(或者你限制它的任何东西)。但是你需要为你用作T的任何东西定义一个端点。
我建议使用界面而不是通用界面。
答案 2 :(得分:0)
所以,我正在尝试通用,因为我已经有了一个接口,但需要一个通用功能的公共基类。所以,我正在尝试这个:
public class TransactionProcessingService<T> : ITransactionProcessingService where T : BaseProgram
因为我想拥有BaseProgram的常用功能和属性。我无法继承2个接口或接口和类,因为我只能有一个wsHttpBinding绑定端点。我最终回到了
public class TransactionProcessingService : ITransactionProcessingService
和
public class MyServiceBase<T, U> : ServiceBase where U : BaseProgram, new()
其中MyServiceBase提供了一个静态属性,它只提供对U的静态实例中属性的访问。
private static U mProcess;
protected ServiceHost mServiceHost = null;
public static int StatusCheckFrequency
{
get { return mProcess.StatusCheckFrequency; }
set { mProcess.StatusCheckFrequency = value; }
}
这是有效的,因为我只打算在一台机器上运行每个服务的一个实例。
我会给ie。答案是因为它似乎回答了我的问题,即使我最终没有尝试过它。