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 の共通の機能とプロパティが必要だったからです。wsHttpBinding バインディング エンドポイントを 1 つしか持てなかったため、2 つのインターフェイス、またはインターフェイスとクラスから継承できませんでした。私は結局に戻った

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; }
}

これが機能するのは、1 つのマシンで各サービスのインスタンスを 1 つだけ実行するつもりだからです。

あげます。答えは、試してみませんでしたが、私の質問に答えているように見えるためです。

于 2012-07-20T18:54:55.127 に答える