自托管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服务的配置。在我看来,您缺少运行自托管服务所需的一些标记或属性。