使用控制台应用程序的 WCF 服务主机
WCF Service Host using Console App
有没有办法自动将条目添加到将用作 WCF 服务主机的控制台应用程序的 App.config,或者我是否需要手动创建这些条目?
我指的是 App.config 文件中的 <system.serviceModel>
部分来配置 WCF 服务。
服务库项目的其他问题 app.config
我了解 .svc 文件的概念,只有在您想使用 IIS 托管服务时才需要这些文件。首先,我计划使用 cosole 应用程序自行托管服务。现在我面临的另一个问题是我的服务库项目的 web.config。我创建服务库工程的时候,自动创建了一个app.config,自动生成了服务配置。但是,我已经更改了 class 名称,现在我看到 app.config 中的 <service name="MyServiceName">
参数错误以及服务合同属性错误。
以下配置有什么问题? 我收到服务名称="ContactMgrService.ContactManager" 和合同="ContactMgrService.IContactMgrService"
的错误
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="ContactMgrService.ContactManager">
<endpoint address="" binding="basicHttpBinding" contract="ContactMgrService.IContactMgrService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/ContactMgrService/Service1/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
服务合同
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using ContactMgrService.DataModel.Contact;
namespace ContactMgrService.Contact
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IContactMgrService
{
[OperationContract]
IList<ContactData> GetContactList(int? value);
}
}
服务实施class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ContactMgrService.DataModel.Contact;
namespace ContactMgrService.Contact
{
public class ContactManager : IContactMgrService
{
ContactContext db = new ContactContext();
public IList<ContactData> GetContactList(int? value)
{
IQueryable<ContactData> contacts = db.Contacts;
return contacts.ToList();
}
}
}
您是否严格需要编辑 App.Config 才能 define/edit 服务配置?
除此之外,我建议您以编程方式进行 - 例如检查此 link。我不确定你是想用它来创建新端点还是只是更改设置,但仍然可以这样做。
使用自托管时不强制要求有 svc 文件。它有助于像 asmx 文件一样使用外部世界。我的建议是使用默认配置作为参考并创建自己的配置。因为这些包括托管服务的地址。绑定你想使用什么样的绑定。和合同您希望使用的合同类型。
使用 WCFTestClient / 编辑 WCF 配置实用程序将在此处为您提供帮助。
https://msdn.microsoft.com/en-us/library/ms732009(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/ms731758(v=vs.110).aspx
您的配置文件不正确。指定服务名称和端点协定值时,您需要指定包含服务或服务定义的类型的完全限定名称:
<service name="ContactMgrService.Contact.ContactManager">
和
<endpoint address=""
binding="basicHttpBinding"
contract="ContactMgrService.Contact.IContactMgrService">
回答您的其他问题:
Is it mandatory to have a project with svc files?
在控制台应用程序中使用 svc 文件即使不是不可能也是非常不正统的。这严格适用于 IIS。
Is there a way to automatically add entries to the App.config
不,您必须手动执行此操作。
有没有办法自动将条目添加到将用作 WCF 服务主机的控制台应用程序的 App.config,或者我是否需要手动创建这些条目?
我指的是 App.config 文件中的 <system.serviceModel>
部分来配置 WCF 服务。
服务库项目的其他问题 app.config
我了解 .svc 文件的概念,只有在您想使用 IIS 托管服务时才需要这些文件。首先,我计划使用 cosole 应用程序自行托管服务。现在我面临的另一个问题是我的服务库项目的 web.config。我创建服务库工程的时候,自动创建了一个app.config,自动生成了服务配置。但是,我已经更改了 class 名称,现在我看到 app.config 中的 <service name="MyServiceName">
参数错误以及服务合同属性错误。
以下配置有什么问题? 我收到服务名称="ContactMgrService.ContactManager" 和合同="ContactMgrService.IContactMgrService"
的错误<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true" />
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="ContactMgrService.ContactManager">
<endpoint address="" binding="basicHttpBinding" contract="ContactMgrService.IContactMgrService">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:8733/Design_Time_Addresses/ContactMgrService/Service1/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
</configuration>
服务合同
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using ContactMgrService.DataModel.Contact;
namespace ContactMgrService.Contact
{
// NOTE: You can use the "Rename" command on the "Refactor" menu to change the interface name "IService1" in both code and config file together.
[ServiceContract]
public interface IContactMgrService
{
[OperationContract]
IList<ContactData> GetContactList(int? value);
}
}
服务实施class:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ContactMgrService.DataModel.Contact;
namespace ContactMgrService.Contact
{
public class ContactManager : IContactMgrService
{
ContactContext db = new ContactContext();
public IList<ContactData> GetContactList(int? value)
{
IQueryable<ContactData> contacts = db.Contacts;
return contacts.ToList();
}
}
}
您是否严格需要编辑 App.Config 才能 define/edit 服务配置?
除此之外,我建议您以编程方式进行 - 例如检查此 link。我不确定你是想用它来创建新端点还是只是更改设置,但仍然可以这样做。
使用自托管时不强制要求有 svc 文件。它有助于像 asmx 文件一样使用外部世界。我的建议是使用默认配置作为参考并创建自己的配置。因为这些包括托管服务的地址。绑定你想使用什么样的绑定。和合同您希望使用的合同类型。
使用 WCFTestClient / 编辑 WCF 配置实用程序将在此处为您提供帮助。
https://msdn.microsoft.com/en-us/library/ms732009(v=vs.110).aspx
https://msdn.microsoft.com/en-us/library/ms731758(v=vs.110).aspx
您的配置文件不正确。指定服务名称和端点协定值时,您需要指定包含服务或服务定义的类型的完全限定名称:
<service name="ContactMgrService.Contact.ContactManager">
和
<endpoint address=""
binding="basicHttpBinding"
contract="ContactMgrService.Contact.IContactMgrService">
回答您的其他问题:
Is it mandatory to have a project with svc files?
在控制台应用程序中使用 svc 文件即使不是不可能也是非常不正统的。这严格适用于 IIS。
Is there a way to automatically add entries to the App.config
不,您必须手动执行此操作。