2

VS 2010 で作成された WCF サービス アプリケーションがあります。実行すると、次のローカル URL にサービス ページが表示されます。

ここに画像の説明を入力

以下に示すように、別のセルフホスティングコンソールアプリケーションを作成しました。次の例外をスローしています

HTTP は URL を登録できませんでした。プロセスには、この名前空間へのアクセス権がありません (詳細については、http: //go.microsoft.com/fwlink/ ?LinkId=70353を参照してください)。

49609 のポート番号には特に関心はありません。他の稼働中のサービスからコピーしました。

これで、WCF サービスを実行するための最低限の権利が得られました。次のコードを成功させるには、どのような変更を行う必要がありますか?

注: このマシンで管理者権限を取得する機会はありません。

注: 機能する任意のポート番号で問題ありません。

namespace ConsoleApplication1
{
class Program
{
    static void Main(string[] args)
    {
        string baseAddress = "http://" + Environment.MachineName + ":49609/Service";
        ServiceHost host1 = new ServiceHost(typeof(Service1), new Uri(baseAddress));
        host1.AddServiceEndpoint(typeof(ConsoleApplication1.IService1), new BasicHttpBinding(), baseAddress);
        host1.Open();

    }
    static Binding GetBinding()
    {
        BasicHttpBinding result = new BasicHttpBinding();
        return result;
    }

}

}

サービス

public class Service1 : IService1
{
    public int Add(int n1, int n2)
    {
        return n1 + n2;
    }
}

[ServiceContract]
public interface IService1
{
    [OperationContract]
    int Add(int n1, int n2);
}
4

2 に答える 2

6

コンソール アプリケーションが HTTP.sys を使用して受信 (リッスン) TCP ポートを開く (これは、WCF の自己ホスト型シナリオで使用されるものです) には、管理者特権を持つか、「名前空間を予約するための管理者特権を持つアカウント」が必要です。特定のアカウント (またはすべてのアカウント) が使用する " (つまり、ポート/パスのペア)。管理者権限を取得できないと述べているため、使用する名前空間へのアクセスを許可するには、マシンに管理者を取得する必要があります。

たとえば、私のマシンの 1 つで、VS を管理者として実行したことはありません (または、一部の操作が必要な場合は最善を尽くします) が、WCF サービスを開始するために 1 つのパス (私の場合はhttp://<my-machine-name>:8000/Service) を選択し、それを再利用します。そのパスをサービスのベース アドレスとして使用します。そのため、管理者として以下のコマンドラインを実行する必要がありました。

netsh http add urlacl url=http://+:8000/Service user=MYDOMAIN\myusername

あなたの場合、同様のコマンドを実行するには、ボックス内の管理者を取得する必要があります。

于 2013-03-20T19:31:20.830 に答える