Не удается получить доступ к методам ServiceHost - PullRequest
1 голос
/ 10 февраля 2012

У меня есть проект Silverlight, который использует созданную мной службу WCF. Моя проблема в том, что в моей службе WCF я создал ServiceHost, но VS2010, похоже, не распознает экземпляр моего объекта (подчеркивает svHost). Ниже приведен код моего сервиса.

using System;
using System.Collection.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;
using System.ServiceModel.Activation;

namespace userIO.Web
{
     [ServiceContract]
     public class CoordsService
     {
         [OperationContract]
         public double xDir();
         [OperationContract]
         public double yDir();
         [OperationContract]
         public String keyPressed();

         public class Coords : CoordsService
         {
             public double xDir { get; set; }
             public double yDir { get; set; }
             public String keyPressed { get; set; }
         }

         ServiceHost svHost = new ServiceHost(typeof(Coords), new Uri("http://localhost:8080"));
         BasicHttpBinding binding = new BasicHttpBinding();
         svHost.AddServiceEndpoint(typeof(CoordsService), binding, "");
         svHost.Open();
     }
}

1 Ответ

2 голосов
/ 10 февраля 2012

Ваш ServiceContract должен украшать интерфейс (контракт). ServiceHost должен размещать экземпляр этого интерфейса и находиться вне той же службы, что и хост. По крайней мере, я видел это только так.

Основная структура:

[ServiceContract]
public interface IService
{
     [OperationContract]
     void DoSomething(Data data);
}

[DataContract]
public class Data
{
     [DataMember]
     int Num {get;set;}
}

public class Service : IService
{
    public void DoSomething(Data data)
    {  // do something }
}

// run in any other kind of app, console, win service, winform/wpf
static void Main()
{
         ServiceHost svHost = new ServiceHost(typeof(Service), new Uri("http://localhost:8080"));
         BasicHttpBinding binding = new BasicHttpBinding();
         svHost.AddServiceEndpoint(binding, "");
         svHost.Open();

}

Еще более простое решение для запуска службы в VS2010 - это просто создать службу в новом шаблоне службы WCF. Извлеките их демонстрационный код, вставьте свой собственный код для интерфейса servicecontract и службы реализации, затем выберите debug -> run, и VS2010 разместит службу для вас без необходимости создания внешнего приложения для запуска службы. Также позволит вам отправлять данные в службу для проверки кода и возвращаемых значений ваших функций wcf в их простом приложении winforms.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...