WCF и Azure: имя контракта не найдено в списке реализованных контрактов - PullRequest
0 голосов
/ 06 октября 2011

Я узнаю о том, как осуществлять взаимодействие с рабочими ролями с помощью WCF (Windows Communication Foundation).

Я точно следовал демонстрации, показанной по этой ссылке: Работа с рабочими ролями

Но когда я запускаю программу, я получаю исключение InvalidOperation:

Имя контракта 'WcfServiceLibrary1.IService1' не найдено в списке контрактов, реализованных службой 'System.ServiceModel.ServiceHost '.

Вот моя трассировка стека:

Необработанное исключение: System.InvalidOperationException: имя контракта' WcfServiceLibrary1.IService1 'не найдено в спискеконтракты, реализованные сервисом 'System.ServiceModel.ServiceHost'.в System.ServiceModel.ServiceHost.ValidateContractType (TypeagedContract, ReflectedAndBehaviorContractCollection refleAndBehaviorContracts) в System.ServiceModel.ServiceHost.AddServiceEndpoint (реализованный тип., Привязка привязки, адрес Uri) в System.ServiceModel.ServiceHost.AddServiceEndpoint (Тип реализованного связывания, Привязка привязки, Строковый адрес, Uri listenUri)
в System.ServiceModel.ServiceHost.AddServiceEndpoint (Тип реализованного контекста, привязка привязки, адрес строки)WorkerRole1.WorkerRole.StartService1 () в C: \ Users \ veda \ Documents \ visual studio 2010 \ Projects \ roleToRoleCommInternalEndPt \ WorkerRole1 \ WorkerRole.cs: строка 53 в WorkerRole1.WorkerRole.Run () в C: \ Users \ veda \ documents\ visual studio 2010 \ Projects \ roleToRoleCommInternalEndPt \ WorkerRole1 \ WorkerRole.cs: строка 26 в Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRoleInternal () в Microsoft.WindowsAzure.ServiceRuntime.RoleEnvironment.StartRole ()
в Microsoft.WindowsAzure.ServiceRuntime.Implementation.Loader.RoleRuntimeBridge.b__1 () в системном вызове System.Threading.ExecutionContextContextConnect, Состояние объекта, Boolean ignoreSyncCtx) в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, ContextCallback callback, Состояние объекта) в System.Threading.ThreadHelper.ThreadStart ()

Код внутри рабочей роли:

private void StartService1()
    {
        Trace.TraceInformation("Starting service 1 host...");

        this.serviceHost = new ServiceHost(typeof(ServiceHost));
        var binding = new NetTcpBinding(SecurityMode.None);

        serviceHost.AddServiceEndpoint(typeof(WcfServiceLibrary1.IService1),
                                        binding,
                                        string.Format("net.tcp://{0}/Service1",
                                        RoleEnvironment.CurrentRoleInstance.InstanceEndpoints["RoleToRole"].IPEndpoint));

        WorkerRole.factory = new ChannelFactory<IService1>(binding);

        try
        {
            serviceHost.Open();
            Trace.TraceInformation("Service Host started successfully.");
        }
        catch (Exception e)
        {
            Trace.TraceError("There is an error {0}:", e.Message);
        }                               
    }

Код WCF:

    namespace WcfServiceLibrary1
{
    // 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]
        string SayHello(string value);


    }
}

Может кто-нибудь сказать мне, как решить эту проблему.

1 Ответ

0 голосов
/ 07 октября 2011

Ваша первая проблема заключается в том, что вы указали ServiceHost разместить ServiceHost вместо класса обслуживания. Эта строка не имеет никакого смысла:

this.serviceHost = new ServiceHost(typeof(ServiceHost));  

Вам необходимо заменить его на:

this.serviceHost = new ServiceHost(typeof(Service1)); 

и добавьте

public class Service1: IService1
{
     public string SayHello(string value) { return string.Format("Hello from {0}", value); }
}

Пример размещения в ответе на этот вопрос полностью основан на коде и настолько прост, насколько это возможно. Используйте его для справки.

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