Я узнаю о том, как осуществлять взаимодействие с рабочими ролями с помощью 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);
}
}
Может кто-нибудь сказать мне, как решить эту проблему.