0

ホストされたエンドポイントを設定する最も基本的な例を取り上げました... http://msdn.microsoft.com/en-us/library/ms731758.aspx ...そしてこれからサービスを構成したいと思いますたとえばIIS内で行う方法で...アプリケーションの構成ファイルを使用します。

これは、このシナリオのデフォルトではないようです。

何か案は?

編集:

上記のリンクのように私はこのようなものを持っています...

// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
    // Enable metadata publishing.
    ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
    smb.HttpGetEnabled = true;
    smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
    host.Description.Behaviors.Add(smb);

    // Open the ServiceHost to start listening for messages. Since
    // no endpoints are explicitly configured, the runtime will create
    // one endpoint per base address for each service contract implemented
    // by the service.
    host.Open();

    Console.WriteLine("The service is ready at {0}", baseAddress);
    Console.WriteLine("Press <Enter> to stop the service.");
    Console.ReadLine();

    // Close the ServiceHost.
    host.Close();
}

ここで、configを使用して「baseAddress」とsmbオブジェクト情報を割り当てたいと思います。たとえば、http://msdn.microsoft.com/en-us/library/ms733932.aspx ..で定義されています。

<system.ServiceModel>

   <services>
   <!—- Define the service endpoints. This section is optional in the new
    default configuration model in .NET Framework 4. -->
      <service>
         <endpoint/>
      </service>
   </services>

   <bindings>
   <!-- Specify one or more of the system-provided binding elements,
    for example, <basicHttpBinding> --> 
   <!-- Alternatively, <customBinding> elements. -->
      <binding>
      <!-- For example, a <BasicHttpBinding> element. -->
      </binding>
   </bindings>

   <behaviors>
   <!-- One or more of the system-provided or custom behavior elements. -->
      <behavior>
      <!-- For example, a <throttling> element. -->
      </behavior>
   </behaviors>

</system.ServiceModel>

私の問題は、ブラウザを使用して設定されたベースアドレスを参照すると、エンドポイントが期待どおりに表示されないことです。

エラーは発生せず、アクティブなエンドポイントがアップしているように動作します...しかし、どこにありますか?

編集2:追加情報:私が使用しているコードは上記のとおりです、私の設定ファイルは次のようになります...

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
    <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net"/>
    <section name="TaskServiceConfiguration" type="emedia.nemo.Configuration.XmlSerializerSectionHandler, emedia.nemo"/>
  </configSections>

  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>

  <TaskServiceConfiguration type="Emedia.TaskScheduler.Service.TaskServiceConfiguration, Emedia.TaskScheduler.Service, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null">
    <PollInterval>5</PollInterval>
    <ServiceURL>http://localhost:10000/TaskSchedulerService.svc</ServiceURL>
  </TaskServiceConfiguration>

  <log4net>
    <appender name="FileAppender" type="log4net.Appender.FileAppender">
      <file value="log-file.txt"/>
      <appendToFile value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    <appender name="DebugFileAppender" type="log4net.Appender.FileAppender">
      <file value="log-file.txt"/>
      <appendToFile value="true"/>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%date %-5level %logger - %message%newline"/>
      </layout>
    </appender>
    <appender name="ColoredConsoleAppender" type="log4net.Appender.ColoredConsoleAppender">
      <mapping>
        <level value="ERROR"/>
        <foreColor value="Red"/>
      </mapping>
      <mapping>
        <level value="DEBUG"/>
        <foreColor value="Yellow"/>
      </mapping>
      <layout type="log4net.Layout.PatternLayout">
        <conversionPattern value="%-5level- %message%newline"/>
      </layout>
    </appender>
    <root>
      <level value="DEBUG"/>
      <appender-ref ref="FileAppender"/>
      <appender-ref ref="ColoredConsoleAppender"/>
    </root>
  </log4net>

  <system.diagnostics>
    <sources>
      <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="Default" type="System.Diagnostics.DefaultTraceListener" />
          <add name="ServiceModelMessageLoggingListener" />
        </listeners>
      </source>
      <source name="System.ServiceModel" propagateActivity="true" switchValue="Warning, ActivityTracing">
        <listeners>
          <add name="Default" type="System.Diagnostics.DefaultTraceListener" />
          <add name="ServiceModelTraceListener" />
        </listeners>
      </source>
    </sources>
    <sharedListeners>
      <add name="ServiceModelMessageLoggingListener"
           initializeData="Web_messages.svclog"
           traceOutputOptions="Timestamp"
           type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
           />
      <add name="ServiceModelTraceListener"
           initializeData="Web_tracelog.svclog"
           traceOutputOptions="Timestamp"
           type="System.Diagnostics.XmlWriterTraceListener, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
           />
    </sharedListeners>
  </system.diagnostics>

  <system.serviceModel>
    <!-- Server side stuff -->
    <services>
      <service behaviorConfiguration="wsHttpBehaviour"
               name="Emedia.Messaging.Services.TaskSchedulerService">
        <endpoint address="http://localhost:10000/TaskSchedulerService.svc"
                  binding="wsHttpBinding"
                  bindingConfiguration="wsHttpBinding"
                  contract="Emedia.Messaging.Services.ITaskServiceContract"
                  />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="wsHttpBehaviour">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
        <behavior name="">
          <serviceMetadata httpGetEnabled="true" />
          <serviceDebug includeExceptionDetailInFaults="true" />
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>

    <!-- Client side stuff -->
    <bindings>
      <wsHttpBinding>
        <binding name="wsHttpBinding"
                 closeTimeout="00:01:00"
                 openTimeout="00:01:00"
                 receiveTimeout="00:10:00"
                 sendTimeout="00:01:00"
                 bypassProxyOnLocal="false"
                 transactionFlow="false"
                 hostNameComparisonMode="StrongWildcard"
                 maxBufferPoolSize="524288"
                 maxReceivedMessageSize="65536"
                 messageEncoding="Text"
                 textEncoding="utf-8"
                 useDefaultWebProxy="true"
                 allowCookies="false">
          <readerQuotas maxDepth="32"
                        maxStringContentLength="8192"
                        maxArrayLength="16384"
                        maxBytesPerRead="4096"
                        maxNameTableCharCount="16384"
                        />
          <reliableSession ordered="true"
                           inactivityTimeout="00:10:00"
                           enabled="false"
                           />
          <security mode="Message">
            <transport clientCredentialType="Windows"
                       proxyCredentialType="None"
                       realm=""
                       />
            <message clientCredentialType="Windows"
                     negotiateServiceCredential="true"
                     algorithmSuite="Default"
                     />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>

    <client>
      <endpoint address="http://localhost:10000/TaskSchedulerService.svc"
                binding="wsHttpBinding"
                bindingConfiguration="wsHttpBinding"
                contract="WCFTask.ITaskServiceContract"
                name="wsHttpBinding">
      </endpoint>
    </client>
  </system.serviceModel>
</configuration>

編集:スコープの詳細:

wcfエンドポイントはWebプロジェクトで定義されています。Webプロジェクトは、そのインスタンスをホストするWindowsサービスによって参照されます。次に、テストするためにWindowsサービスのインスタンスを参照および作成するコンソールアプリがあります。

私の質問は、そのコンソールアプリにWindowsサービスを起動させ、次にWCFエンドポイントを取得して、ソリューションのエンドツーエンドのテストを実行するためにエンドポイントで呼び出しを行えるようにすることです。

4

1 に答える 1

2

追加情報に基づいて修正された回答

わかりました。正しく理解していれば、WCF Webアプリケーションと、そのWCFサービスのインスタンスを作成する別のWindowsサービスを作成しました。ここで、ソリューションをテストするためのコンソールアプリを作成しようとしています。

あなたは物事を必要以上に複雑にしていると思います。Windowsサービスは、WCFサービスを呼び出すクライアントであるか、WCFサービス自体をホストする必要があります。

いずれにせよ、ソリューションのエンドツーエンドのテストを行うためにコンソールアプリを作成している場合、コンソールアプリはクライアントServiceHostであるように思われます。これは、私が言ったように、ホスティングとは関係ありません。サービス。

コンソールアプリ内からサービスを開始する(または個別に開始して既に実行している)だけで、他のクライアントと同じようにWindowsサービスに対して呼び出しを実行できます。

それでも足りないものがある場合は、お知らせください。もう一度やり直します。サインオフしようとしていますので、お気軽にメールでお問い合わせください(私のアドレスは私のプロフィールにあります)。明日確認します。

于 2012-04-13T08:53:28.543 に答える