vicvis Ответов: 2

Ошибка WCF.Не удалось создать и понять конечную точку.Что такое конечные точки хоста


Всем Привет,

Я недавно начал изучать WCF, и я действительно запутался в конечных точках.
Что такое конечные точки хоста?

Я создал простую службу хоста и клиента и разместил ее затем в форме Windows, но я не могу вызвать службы. :(
------------------------------------------------------------------------------------
Код hostService-
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService2
{
    // 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 IService1
    {

        [OperationContract(IsOneWay=true)]
        void SendCreditLimitRequest(string id);


    }

}

и
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;

namespace WcfService2
{
    // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in code, svc and config file together.
    public class Service1 : IService1
    {

        public void  SendCreditLimitRequest(string id)
        {
            double value;

            if (id == "1")
                value = 10;
            else if (id == "2")
                value = 20;
            else
                value = 0;


        }
    }
}

--------------------
Его веб-конфигурация такова--
<?xml version="1.0"?>
<configuration>

  <system.web>
    <compilation debug="true" targetFramework="4.0" />
  </system.web>
  <system.serviceModel>
    <services>
      <service name="Service1">
        <clear />
        <host>
          <baseAddresses>
            <add  baseAddress ="http://localhhost/host"/>
          </baseAddresses>
        </host>
        <endpoint address="net.msmq://localhost/private/requestqueue"

          binding="netMsmqBinding" bindingConfiguration="" name="ServiceEndpoint"

          contract="WcfService2.IService1" />
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior>
          <!-- 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>
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" />
  </system.serviceModel>
 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true"/>
  </system.webServer>
  
</configuration>

----------------------------------------------------------------------------------
Код моего оконного хоста выглядит следующим образом :
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.ServiceModel;
using System.ServiceProcess;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace host
{
    public partial class Form1 : Form
    {
        ServiceHost host;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            host = new ServiceHost(typeof(WcfService2.Service1Client));
            host.Open();
            MessageBox.Show("Service Started!");

        }

        private void button2_Click(object sender, EventArgs e)
        {
            host.Close();
        }
    }
}

--------------------------------------------------------------------------------
и исключение с которым я сталкиваюсь это---
System.InvalidOperationException was unhandled
  Message=Service 'host.WcfService2.Service1Client' has zero application (non-infrastructure) endpoints. This might be because no configuration file was found for your application, or because no service element matching the service name could be found in the configuration file, or because no endpoints were defined in the service element.
  Source=System.ServiceModel
  StackTrace:
       at System.ServiceModel.Description.DispatcherBuilder.EnsureThereAreApplicationEndpoints(ServiceDescription description)
       at System.ServiceModel.Description.DispatcherBuilder.InitializeServiceHost(ServiceDescription description, ServiceHostBase serviceHost)
       at System.ServiceModel.ServiceHostBase.InitializeRuntime()
       at System.ServiceModel.ServiceHostBase.OnBeginOpen()
       at System.ServiceModel.ServiceHostBase.OnOpen(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open(TimeSpan timeout)
       at System.ServiceModel.Channels.CommunicationObject.Open()
       at host.Form1.button1_Click(Object sender, EventArgs e) in C:\WcfPrograms\host\host\Form1.cs:line 25
       at System.Windows.Forms.Control.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnClick(EventArgs e)
       at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
       at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
       at System.Windows.Forms.Control.WndProc(Message& m)
       at System.Windows.Forms.ButtonBase.WndProc(Message& m)
       at System.Windows.Forms.Button.WndProc(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
       at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
       at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
       at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
       at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
       at System.Windows.Forms.Application.Run(Form mainForm)
       at host.Program.Main() in C:\WcfPrograms\host\host\Program.cs:line 18
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

----------------------
Пожалуйста, помогите !!

2 Ответов

Рейтинг:
14

fjdiewornncalwe

Лучший ответ, который я могу вам дать, - это ссылка на документацию MSDN по этой теме:
http://msdn.microsoft.com/en-us/library/ms733107.aspx[^]
Он подробно объясняет все вопросы, которые у вас есть в этом посте.


vicvis

Я изменил свой файл App.config, и проблема была решена.
Однако один вопрос все еще остается у меня в голове.....Что произойдет и с какими ограничениями я столкнусь в случае, если конечные точки метаданных не будут предоставлены мной.

fjdiewornncalwe

Я не совсем уверен, но я бы предположил, что если бы конечные точки должны были быть динамическими в развернутых версиях моего кода, я бы предоставил интерфейс, чтобы убедиться, что конечные точки правильно настроены из приложения.

vicvis

Я все еще не могу понять, почему мы определяем клиентские конечные точки в нашей конфигурации сервиса.
Я понимаю, что такое конечные точки на стороне сервиса, но определение конечных точек под тегом "клиент" - это мой вопрос???Может ли кто-нибудь пролить свет на это?Заранее спасибо

Рейтинг:
0

Malikdanish

Проверьте дважды проверьте свое имя службы и убедитесь что вы используете свое пространство имен вместе с интерфейсом ничего кроме этого

<services>
     <service behaviorConfiguration="maxBehavior"
              name="SimplesServices.SimplesServices">

       <endpoint address="SimplesServices"
          binding="basicHttpBinding"
                 contract="SimplesServices.ISimplesServices"/>
       <host>
         <baseAddresses>
           <add baseAddress="http://localhost:8080"/>
         </baseAddresses>
       </host>
     </service>

Сосредоточьтесь на вышеприведенном разделе