自托管SOAP服务C#.Net

自托管SOAP服务C#.Net,c#,web-services,soap,C#,Web Services,Soap,我有一个应该承载服务的应用程序。该服务正在实现一个接口,如下所示: [ServiceContract] public interface IRegistrationCaseFetcherService { [OperationContract] bool CancelTransaction(string transactionControlNumber); [OperationContract] bool

我有一个应该承载服务的应用程序。该服务正在实现一个
接口
,如下所示:

    [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;
                }
            }
        }    
公共静态类服务
{
专用静态服务主机_服务;
私有静态bool_isHosted=false;
公共静态布尔StartRecieveService()
{
var address=string.Format(“http://{0}:8732/Services/RService”,Dns.GetHostName());
_服务=新服务主机(类型(RegistrationCaseFetcherService),新Uri(地址));
_AddServiceEndpoint(typeof(IRegistrationCaseFetcherService),新的BasicHttpBinding(),地址);
var serviceMataDatabehaviour=_service.Description.Behaviors.Find();
如果(serviceMetaDataBehaviour==null)serviceMetaDataBehaviour=new ServiceMetadataBehavior();
serviceMetaDataBehaviour.HttpGetEnabled=true;
serviceMetaDataBehaviour.MetadataExporter.PolicyVersion=PolicyVersion.Policy15;
_service.Description.Behaviors.Add(serviceMetaDataBehaviour);
尝试
{
_service.Open();
_isHosted=true;
如果(_service.BaseAddresses.Count>0)
_Trace(String.Format(“正在等待对:{0}”的输入调用,_service.BaseAddresses[0].AbsoluteUri));
返回true;
}
捕获(例外e)
{
_logger.Error(“失败,异常:+e”);
返回false;
}
}
}    
似乎在调试时触发了服务,没有引发异常。在我的Web浏览器中打开URL不起作用,它表示资源不知何故不存在。我还尝试在
WCF测试客户机中打开它,但是我确实得到了
错误:无法获取元数据

我如何才能真正验证我的服务是否已启动并正在运行?我应该在代码中做哪些更改才能使其正常工作

提前感谢

看一看

您将需要添加至少一个端点(此处http表示“wsdl”),其中元数据是公开的:

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

向我们显示您的Web.configMy Web.config不包含任何与此相关的内容。应该吗?我想从代码开始做所有的事情。你到底在找什么?我只是想检查一下你的Web服务的配置。在我看来,您缺少运行自托管服务所需的一些标记或属性。