Самостоятельная служба SOAP C # .Net

1

У меня есть приложение, которое должно содержать службу. Служба реализует 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.

Как мне возможно проверить, работает ли мой сервис? И какие изменения в моем коде следует делать, чтобы заставить его работать?

заранее спасибо

  • 1
    покажи нам свой Web.config
  • 0
    Мой web.config не содержит ничего связанного с этим. Должно ли это? Я хочу сделать все из кода. Что именно вы ищете?
Показать ещё 1 комментарий
Теги:
soap
web-services

1 ответ

2

Посмотри на

http://social.msdn.microsoft.com/Forums/vstudio/en-US/3def9d4f-ae3e-468b-90e6-3a069bac6376/when-to-use-wcf-mex-endpoint

Вам нужно будет добавить хотя бы одну конечную точку (здесь http для "wsdl"), где отображаются метаданные:

_service.AddServiceEndpoint(ServiceMetadataBehavior.MexContractName,
    MetadataExchangeBindings.CreateMexHttpBinding(),
    "mex");

Ещё вопросы

Сообщество Overcoder
Наверх
Меню