2

WCF サービスをテストしていますが、サービスがカスタム ファクトリを使用してブートストラップされているため、動作を偽造する必要があります。これは、テスト用に書いたコードです。

var channelFactory = new ChannelFactory<IDomainWriteService>(
   new CustomBinding(
      new BinaryMessageEncodingBindingElement(), 
      new HttpTransportBindingElement()),
   new EndpointAddress(new Uri("local")));
var service = channelFactory.CreateChannel();

そして、新しい ServiceHost を作成するテストの初期化があります。

internal static void StartService()
{
    Instance = new ServiceHost(typeof (DomainWriteService));
    Instance.Open();
}

次の方法で、MsTest プロジェクトに偽のエンドポイントを構成しました。

<service name="xxx.DomainWriteService">
  <endpoint binding="basicHttpBinding" bindingConfiguration=""
    name="local" bindingName="http" contract="xxx.IDomainWriteService" />
  <host>
    <baseAddresses>
      <add baseAddress="http://xxx/service" />
    </baseAddresses>
  </host>
</service>

しかし、テストを実行すると、次のランタイム エラーが発生します。

    Class Initialization method xxx.ClassInitialize threw exception. System.ServiceModel.AddressAccessDeniedException: 
System.ServiceModel.AddressAccessDeniedException: 
HTTP could not register URL **http://+:80/service/**. 
Your process does not have access rights to this namespace 
(see http://go.microsoft.com/fwlink/?LinkId=70353 for details). ---> 
System.Net.HttpListenerException: Access is denied.

私はWindows 8を使用しています

4

1 に答える 1

6

ポート 80 で受信できるようにリッスンしているプロセスへのアクセスを許可するために使用する必要がありますnetsh add urlacl(またはポート 80 を他のリスナーと共有します)。

netsh http add urlacl url=http://+:80/service user=YOURUSER

YOURUSERリスナーを実行しているプロセスの資格情報はどこにありますかDOMAIN\User

関連項目: WCF ServiceHost アクセス権

于 2013-01-28T14:44:31.963 に答える