У меня есть приложение, которое должно содержать службу. Служба реализует Interface
подобный этому:
[ServiceContract]
public interface IRegistrationCaseFetcherService
{
[OperationContract]
bool CancelTransaction(string transactionControlNumber);
[OperationContract]
bool ConfirmTransaction(string transactionControlNumber);
[OperationContract]
bool UpdateTransaction(string transactionControlNumber, UpdatedRegistrationCase personData);
[OperationContract]
bool checkEndPoint();
}
Моя служба определяется следующим образом:
[ServiceBehavior(UseSynchronizationContext = false)]
public class RegistrationCaseFetcherService : IRegistrationCaseFetcherService
{
static int CallsInProgress = 0;
public bool CancelTransaction(string transactionControlNumber)
{
return true;
}
public bool ConfirmTransaction(string transactionControlNumber)
{
return true;
}
public bool UpdateTransaction(string transactionControlNumber, UpdatedRegistrationCase personData)
{
return true;
}
public bool checkEndPoint()
{
return true;
}
public static bool IsInUse
{
get
{
return (CallsInProgress != 0);
}
}
}
У меня также есть класс для запуска этой службы:
public static class Services
{
private static ServiceHost _service;
private static bool _isHosted = false;
public static bool StartRecieveService()
{
var address = string.Format("http://{0}:8732/Services/RService", Dns.GetHostName());
_service = new ServiceHost(typeof(RegistrationCaseFetcherService), new Uri(address));
_service.AddServiceEndpoint(typeof(IRegistrationCaseFetcherService), new BasicHttpBinding(), address);
var serviceMetaDataBehaviour = _service.Description.Behaviors.Find<ServiceMetadataBehavior>();
if (serviceMetaDataBehaviour == null) serviceMetaDataBehaviour = new ServiceMetadataBehavior();
serviceMetaDataBehaviour.HttpGetEnabled = true;
serviceMetaDataBehaviour.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
_service.Description.Behaviors.Add(serviceMetaDataBehaviour);
try
{
_service.Open();
_isHosted = true;
if (_service.BaseAddresses.Count > 0)
_logger.Trace(String.Format("Waiting for incomming calls on: {0}", _service.BaseAddresses[0].AbsoluteUri));
return true;
}
catch (Exception e)
{
_logger.Error("Failed with exception: " + e);
return false;
}
}
}
Кажется, что служба запускается при отладке, никаких исключений не возникает. Открыв URL-адрес в моем веб-браузере, он не работает, он говорит, что ресурс не существует каким-то образом. Я также попытался открыть его в WCF Test Client
, но затем я получаю сообщение об Error: Cannot Obtain Metadata
удается Error: Cannot Obtain Metadata
.
Как мне возможно проверить, работает ли мой сервис? И какие изменения в моем коде следует делать, чтобы заставить его работать?
заранее спасибо
Посмотри на
Вам нужно будет добавить хотя бы одну конечную точку (здесь http для "wsdl"), где отображаются метаданные:
_service.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
MetadataExchangeBindings.CreateMexHttpBinding(),
"mex");