0

例如

        // 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。

到目前为止,我的应用程序配置出现错误,不知道应该如何修改它:

服务 'TransactionProcessingWindowsService.TransactionProcessingService`1[[Common.TransactionProcessing, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' 的应用程序(非基础设施)端点为零。这可能是因为没有为您的应用程序找到配置文件,或者因为在配置文件中找不到与服务名称匹配的服务元素,或者因为在服务元素中没有定义端点。

这是我尝试设置配置的方式

      <service name="TransactionProcessingWindowsService.TransactionProcessingService&lt;TransactionProcessingWindowsService.TransactionProcessing&gt;"
           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>

谢谢

4

3 回答 3

1

异常详细信息向您显示应使用的服务名称。试试这个:

<service name="TransactionProcessingWindowsService.TransactionProcessingService`1[[Common.TransactionProcessing, Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"
         behaviorConfiguration="TransactionProcessingServiceBehavior">

但这并不酷,因为每次更改程序集版本或签名时都需要更新配置文件。

于 2012-07-20T16:13:01.927 回答
0

您的配置文件具有 ITransactionProcessingService 的端点,但没有 TransactionProcessingService 的端点。

因为您使用的是泛型,所以 T 可以是任何东西(或任何你限制它的东西)。但是你需要为你用作 T 的任何东西定义一个端点。

我会推荐一个接口而不是泛型。

于 2012-07-20T16:01:07.067 回答
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; }
}

这是可行的,因为我只打算让每个服务的一个实例在一台机器上运行。

我给即。答案,因为它似乎回答了我的问题,即使我最终没有尝试它。

于 2012-07-20T18:54:55.127 回答