使用Console App的WCF服务主机

时间:2015-05-14 07:39:38

标签: wcf console-application app-config servicehost

有没有办法自动将条目添加到控制台应用程序的App.config中,该控制台应用程序将用作WCF服务的主机,还是需要手动创建这些条目?

我指的是App.config文件中的<system.serviceModel>部分,用于配置WCF服务。

服务库项目的app.config

的其他问题

我理解.svc文件的概念,只有在您想使用IIS托管服务时才需要这些文件。首先,我计划使用cosole app自行托管服务。现在我面临的另一个问题是我的服务库项目的web.config。创建服务库项目时,会自动创建app.config并自动生成服务配置。但是,我更改了类名,现在我在app.config中看到<service name="MyServiceName">参数的错误以及服务合同属性的错误。

以下配置有什么问题?我收到服务名称=“ContactMgrService.ContactManager”和contract =“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);

}

}

服务实现类:

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

3 个答案:

答案 0 :(得分:1)

您的配置文件不正确。指定服务名称和端点合同值时,需要指定包含服务或服务定义的类型的完全限定名称:

<service name="ContactMgrService.Contact.ContactManager">

<endpoint address="" 
          binding="basicHttpBinding"
          contract="ContactMgrService.Contact.IContactMgrService">

回答您的其他问题:

  

是否必须有一个带有svc文件的项目?

如果不是不可能在控制台应用程序中使用svc文件,这是非常不正统的。这对于IIS来说是绝对的。

  

有没有办法自动将条目添加到App.config

不,你必须手动完成。

答案 1 :(得分:0)

您是否需要编辑App.Config才能定义/编辑服务配置?

而不是那样,我建议你以编程方式进行 - 例如检查link。我不确定你是想要它来创建新的端点还是只是改变设置,但是,它仍然可以这样做。

答案 2 :(得分:0)

在使用自托管时,使用svc文件并不具备任何作用。它像asmx文件一样有助于使用外部世界。我的建议是使用默认配置作为参考并创建自己的配置。因为这些包括服务托管的地址。绑定您想要使用的绑定类型。并签订您希望使用的合同类型。

使用WCFTestClient / Edit 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