2012-04-13 4 views
0

Я взял самый простой пример настройки размещенной конечной точки ... http://msdn.microsoft.com/en-us/library/ms731758.aspx ... и из этого хочу, чтобы моя служба была настроена так, как она делает IIS ... с помощью файла конфигурации для моего приложения.Конфигурирование самообслуживаемых конечных точек wcf

Это похоже не по умолчанию в этом сценарии.

Любые идеи?

EDIT:

согласно ссылке выше у меня есть что-то вроде этого ...

// 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(); 
} 

теперь я хочу, чтобы иметь «BaseAddress» и информацию об объекте, кого-л назначенную с помощью конфигурации. , например, как определено в 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> 

моя проблема заключается в том, что если я просматриваю к настроенному базового адреса, используя мой браузер конечной точки не существует, как и ожидалось.

У меня нет ошибок и действует так же, как и активная конечная точка ... но где это?

EDIT 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> 

EDIT: некоторые более подробно по размаху:

Конечная точка wcf определена в веб-проекте. веб-проект имеет ссылку на службу Windows, в которой содержится экземпляр этого объекта. Затем у меня есть консольное приложение, которое ссылается и создает экземпляр службы Windows, чтобы проверить его.

Мой вопрос заключается в получении этого консольного приложения для запуска службы Windows и, в свою очередь, для конечной точки WCF, чтобы она могла совершать вызовы на конечной точке, чтобы выполнить какое-то сквозное тестирование моего решения.

+1

Что ** точно ** ваш вопрос ?? Можете ли вы показать нам какой-нибудь код и/или конфигурацию, которые у вас есть, и описать, какие проблемы/проблемы у вас есть? –

+0

ok ... 1 минута il добавить некоторые детали – War

+0

Это должно быть намного лучше – War

ответ

2

Пересмотренный Ответ На основании Дополнительной информации

Хорошо, если я вас правильно понимаю, вы создали веб-приложение WCF, а также отдельную служба Windows, который создает экземпляр этого WCF службы. Теперь вы пытаетесь создать консольное приложение для тестирования своего решения.

Я думаю, что вы делаете вещи более сложными, чем они должны быть. Служба Windows должна быть либо клиентом, который вызывает службу WCF, либо должен содержать службу WCF.

В любом случае, если вы пишете консольное приложение для сквозного тестирования своего решения, мне кажется, что консольное приложение является клиентом - который, как я уже сказал, не имеет никакого отношения к ServiceHost или к размещению услуги.

Просто запустите сервис из своего консольного приложения (или запустите его отдельно и запустите его), а затем выполните вызовы с помощью службы Windows так же, как и любой другой клиент.

Если мне что-то не хватает, сообщите мне, и я попробую еще раз.Я собираюсь подписаться, поэтому не стесняйтесь пишите мне (мой адрес в моем профиле), и я буду смотреть на него завтра.

+0

это моя проблема ... я добавил файл app.config и настроил службу, но это похоже на то, что он игнорирует файл конфигурации и просто действует, как я делаю это, не имея там – War

+0

Ах .. не поймать, что часть. Работает ли служба, когда вы переходите к ней в браузере? – Tim

+0

, если я делаю ServiceHost host = new ServiceHost (typeof (HelloWorldService)), то браузер не может найти его, но если я сделаю ServiceHost host = new ServiceHost (typeof (HelloWorldService), «http: // localhost: 10000/TaskSchedulerService.svc»)), то он может, но затем информирует меня о том, что публикация метаданных не включена. – War

Смежные вопросы