使用控制台应用程序的 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

http://www.c-sharpcorner.com/UploadFile/Mahadesh/wcf-series-using-the-wcf-service-configuration-editor/

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

不,您必须手动执行此操作。