C# 配置自托管wcf服务终结点
我举了一个设置托管端点的最基本示例。。。 ... 从这一点上,我想让我的服务配置的方式,它在说IIS。。。为我的应用程序使用配置文件 在这种情况下,这似乎不是默认情况 有什么想法吗 编辑: 根据上面的链接,我有这样的东西C# 配置自托管wcf服务终结点,c#,.net,wcf,C#,.net,Wcf,我举了一个设置托管端点的最基本示例。。。 ... 从这一点上,我想让我的服务配置的方式,它在说IIS。。。为我的应用程序使用配置文件 在这种情况下,这似乎不是默认情况 有什么想法吗 编辑: 根据上面的链接,我有这样的东西 // Create the ServiceHost. using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress)) { // Enable metadata publ
// 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();
}
<?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>
//创建ServiceHost。
使用(ServiceHost主机=新ServiceHost(typeof(HelloWorldService),baseAddress))
{
//启用元数据发布。
ServiceMetadataBehavior smb=新ServiceMetadataBehavior();
smb.HttpGetEnabled=true;
smb.MetadataExporter.PolicyVersion=PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
//打开ServiceHost以开始侦听消息。自
//没有显式配置端点,运行时将创建
//实现的每个服务契约的每个基址一个端点
//通过服务。
host.Open();
WriteLine(“服务在{0}处准备就绪”,基地址);
控制台。WriteLine(“按以停止服务”);
Console.ReadLine();
//关闭ServiceHost。
host.Close();
}
现在,我想使用config分配“baseAddress”和smb对象信息。
例如,定义在
我的问题是,如果我使用浏览器浏览到配置的基址,端点就不会如预期的那样出现
我没有错误,它的行为就像有一个活跃的端点向上。。。但它在哪里
编辑2:其他信息:
我使用的代码如上所述,我的配置文件如下所示
// 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();
}
<?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>
5.
http://localhost:10000/TaskSchedulerService.svc
编辑:有关范围的更多详细信息:
wcf端点在web项目中定义。
web项目由承载其实例的windows服务引用。
然后我有了一个控制台应用程序,它引用并创建了windows服务的一个实例来测试它
我的问题是让控制台应用程序启动windows服务,然后启动WCF端点,以便它可以调用端点,以便对我的解决方案执行一些端到端测试。根据其他信息修改了答案。 好的,如果我理解正确的话,您已经创建了一个WCF web应用程序和一个单独的Windows服务,该服务创建了该WCF服务的实例。现在,您正在尝试创建一个控制台应用程序来测试您的解决方案 我认为你让事情变得比实际需要的更复杂了。Windows服务应该是调用WCF服务的客户端,或者应该承载WCF服务本身 在这两种情况下,如果您正在编写一个控制台应用程序来对您的解决方案进行端到端测试,那么在我看来,控制台应用程序显然就是客户机—正如我所说的,它与
ServiceHost
或托管服务无关
只需从您的控制台应用程序中启动服务(或单独启动并使其已经运行),然后以与任何其他客户端相同的方式对Windows服务执行调用
如果我仍然缺少什么,请告诉我,我会再试一次。我即将结束,请随时给我发电子邮件(我的地址在我的个人资料中),我明天再看。你的问题是什么??你能给我们看一些你的代码和/或配置,并描述你有什么问题吗。。。1分钟il添加一些详细信息如果您在IIS中托管,那么在服务器端,endpoint元素的内容只需将address attributes值保留为空,因为该地址由IIS负责,然后应该可以正常工作我在控制台中托管WCf端点app@Wardy-见我修改后的答案。我还是觉得你们把服务和客户搞混了。除非你试图使用控制台应用程序测试windows服务的逻辑?这是我的问题。。。我已经添加了app.config文件并配置了服务,但它好像忽略了配置文件,只是表现得好像我在做这件事,而不是在那里啊..没有抓住那部分。当您在浏览器中访问服务时,该服务是否正在运行?如果我选择ServiceHost host=new ServiceHost(typeof(HelloWorldService)),则浏览器找不到它,但如果我选择ServiceHost host=new ServiceHost(typeof(HelloWorldService),“”))然后它可以,但它会通知我元数据发布未启用DDO是否有.svc页面?我只将它们(并看到它们)用于IIS托管的WCF服务。确定svc是在web项目中定义的,然后我会引用控制台应用程序用于创建服务主机和启动端点的项目(如上所示)然后,我向项目中添加一个“serviceref”,它为我提供了用于连接到服务的生成的代理类ect和配置信息。