سؤال

أحاول استضافة خدمة WCF داخل خدمة Windows التي بدأت من خلال تطبيق وحدة التحكم. كل خدمة هي مشروعها الخاص كما هو تطبيق وحدة التحكم. لقد قمت بنسخ App.config من مكتبة خدمة WCF في App.config من تطبيق Console، لكنني أظل الحصول على "خدمة لها نقاط نهاية تطبيق صفر ...". لقد قرأت في عدد قليل من الأماكن التي تعني الخطأ مراجع الكتابة غير مؤهلة بالكامل، لكنني مضاعفة (الثلاثي، رباعي ...) فحص ذلك. وأنا متأكد من أنني لدي app.config. هناك 3 EXES في دليل Debug الخاص بي: تطبيق Console، App Console VSHOST، WIN SERVICE. لم يكن لدى خدمة WIN APP.CONFIG، لذلك حاولت نسخ App.config في حالة البحث عنها، ولكن لا حظ. لقد راجعت أيضا للتأكد من تسمية التكوينات بشكل صحيح (u003Cprogram> .exe.config).

إليك ما أستخدمه. تطبيق وحدة التحكم الخاصة بي يخلق مثيل JobSchdeuler ويدعو JobSchedulerConsoleStart.

رمز المضيف:

public partial class JobScheduler : ServiceBase
{
    ServiceHost jobServiceHost = null;

    public JobScheduler()
    {
        ServiceName = "JobSchedulerService";
        InitializeComponent();
    }

    #region Service Init/Uninit

    /// <summary>
    /// OnStart
    /// </summary>
    /// <param name="args"></param>
    protected override void OnStart(string[] args)
    {
        if (jobServiceHost != null)
        {
            jobServiceHost.Close();
        }

        jobServiceHost = new ServiceHost(typeof(JobSchedulerWCF.JobService));

        jobServiceHost.Open();
    }

    /// <summary>
    /// OnStop
    /// </summary>
    protected override void OnStop()
    {
        if (jobServiceHost != null)
        {
            jobServiceHost.Close();
            jobServiceHost = null;
        }
    }

    #endregion

    #region Debugging

    public void JobSchedulerConsoleStart()
    {
        this.OnStart(null);
        Console.WriteLine("Service Started.");

        ProcessInput();

        Console.WriteLine("Service Stopped.");
        this.OnStop();
    }

    private void ProcessInput()
    {
        Console.WriteLine("Press any key to quit...");
        Console.ReadKey();
    }

    #endregion
}

app.config.

<?xml version="1.0"?>
<configuration>
    <system.serviceModel>
        <services>
            <service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF">
                <endpoint address="" binding="wsHttpBinding" contract="JobSchedulerWCF.IJobServiceController, JobSchedulerWCF">
                    <identity>
                        <dns value="localhost" />
                    </identity>
                </endpoint>
                <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
                <host>
                    <baseAddresses>
                        <add baseAddress="http://localhost:12345/jobService"/>
                    </baseAddresses>
                </host>
            </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="JobSchedulerWCF.Service1Behavior">
                    <!-- To avoid disclosing metadata information, 
                        set the value below to false and remove the metadata endpoint above before deployment -->
                    <serviceMetadata httpGetEnabled="True"/>
                    <!-- To receive exception details in faults for debugging purposes, 
                      set the value below to true.  Set to false before deployment 
                      to avoid disclosing exception information -->
                    <serviceDebug includeExceptionDetailInFaults="False" />
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>          
</configuration>
هل كانت مفيدة؟

المحلول 2

لم تصل إلى أسفل هذا. كان هناك شيء قبالة قليلا في التكوين / المشروع. أعيد بناؤها الحل وذهبت المشكلة.

نصائح أخرى

هل يتم تسمية ملفات التكوين الخاصة بك

  • console.app.exe.config.
  • Win.Service.exe.config.

?

تحرير: إذا كنت أتذكر بشكل صحيح، كانت هناك مشكلة في إصدار بيتا من WCF وأسماء الخدمة.

محاولة تغيير

<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService, JobSchedulerWCF">

ل

<service behaviorConfiguration="JobSchedulerWCF.Service1Behavior" name="JobSchedulerWCF.JobService">

قم بإزالة اسم التجميع في ملفات التكوين الخاصة بك.

واسمحوا لي أن أعرف إذا كان هذا يحل المشكلة. لم ربطها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top