Ich habe das grundlegendste Beispiel für die Einrichtung eines gehosteten Endpunkts genommen ... http://msdn.microsoft.com/en-us/library/ms731758.aspx ... und ich möchte, dass mein Dienst so konfiguriert wird, wie er es innerhalb von sagt IIS ... mit der Konfigurationsdatei für meine Anwendung.Konfigurieren von selbst gehosteten WCF-Service-Endpunkten
Das ist scheinbar nicht der Standard in diesem Szenario.
Irgendwelche Ideen?
EDIT:
gemäß den obigen Link i etwas wie dieses ...
// 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();
}
jetzt will ich das "baseaddress" haben und die smb Objekt Informationen über Config zugewiesen. zum Beispiel als
<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>
mein Problem ist bei http://msdn.microsoft.com/en-us/library/ms733932.aspx ... definiert, dass, wie erwartet, wenn ich der Endpunkt ist nicht dort an die konfigurierten Basisadresse mit meinem Browser zu sehen.
Ich bekomme keine Fehler und es verhält sich wie ein aktiver Endpunkt ... aber wo ist es?
EDIT 2: Zusätzliche Informationen: Der Code ich verwende wie oben, meine Config-Datei wie folgt aussieht ...
<?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: einige weitere Einzelheiten über Umfang:
die Der WCF-Endpunkt ist in einem Webprojekt definiert. Das Webprojekt wird von einem Windows-Dienst referenziert, der eine Instanz davon hostet. Ich habe dann eine Konsole App, die auf eine Instanz des Windows-Dienstes verweist und sie erstellt, um sie zu testen.
Meine Frage besteht darin, dass diese Konsolenanwendung den Windows-Dienst und damit den WCF-Endpunkt startet, damit er dann auf dem Endpunkt Aufrufe durchführen kann, um einige End-to-End-Tests meiner Lösung durchzuführen.
Was ** genau ** ist deine Frage ?? Können Sie uns einen Code und/oder eine Konfiguration zeigen, die Sie haben und beschreiben, welche Probleme/Probleme Sie haben? –
ok ... 1 min il fügen Sie einige Details hinzu – War
Das sollte viel besser sein – War