我是新的WCF编程,我确实按照以下链接
遵循了一系列入门教程http://msdn.microsoft.com/en-us/library/ms734712.aspx
我已经在控制台应用程序中托管了服务,但是当我尝试创建客户端并尝试添加服务参考时,我会得到以下例外。
有一个错误下载 'http:localhost:8000/getstarted/mex/_vti_bin/listdata.svc/$ gertadata'。 HTTP状态405:不允许的方法失败。元数据 包含无法解决的参考: 'HTTP:Localhost:8000/Getstarted/Mex'。没有终点 在http:localhost:8000/getstarted/mex上听 接受消息。这通常是由不正确的地址或 肥皂作用。有关更多详细信息,请参见Innerexception(如果存在)。这 远程服务器返回一个错误:(404)找不到。如果服务是 在当前解决方案中定义,尝试构建解决方案并添加 再次服务参考。
托管应用程序的代码
class Program
{
static void Main(string[] args)
{
// Step 1 Create a URI to serve as the base address.
Uri baseAddress =
new Uri("http://localhost:8000/GettingStarted/");
// Step 2 Create a ServiceHost instance
ServiceHost selfHost =
new ServiceHost(typeof(CalculatorService), baseAddress);
try
{
// Step 3 Add a service endpoint.
selfHost.AddServiceEndpoint(typeof(ICalculator),
new WSHttpBinding(),
"CalculatorService");
// Step 4 Enable metadata exchange.
var smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
// Step 5 Start the service.
selfHost.Open();
Console.WriteLine("The service is ready.");
Console.WriteLine("Press <ENTER> to terminate.");
Console.WriteLine();
Console.ReadLine();
// Close the ServiceHostBase to shutdown.
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("exception: {0}", ce.Message);
selfHost.Abort();
}
}
}
现在我无法弄清楚问题是什么。我正在使用Visual Studio 2012和.NET平台4.5。
我也遇到了类似的问题。是的,您似乎已经正确遵循了教程,但是如果您想连接到它并作为服务消费(如在服务参考中),则还必须添加到MEX Service Enpoint中。在您的selfhost.description.behaviors.add(SMB)之后添加此行:
selfhost.AddServiceEndpoint(
typeof(IMetadataExchange),
MetadataExchangeBindings.CreateMexHttpBinding(),
"http://localhost:8000/GettingStarted/mex");
应该使您可以通过"添加服务参考"连接。另外,我发现根据您的系统,您可能需要运行与管理员一起运行以允许连接到网络(如果您不小心告诉它,)。
从错误消息来判断,似乎在指定的端口上没有侦听服务。您需要具有在尝试向其添加服务参考时托管服务运行的控制台应用程序。
显然,该服务没有运行,这意味着在您使用的URL上没有端点来创建服务参考。
您可以在IIS中托管服务,也可以按照上述Damir保持控制台应用程序。
在尝试访问它时,请确保服务器正在运行。还要检查服务器上的配置,并确保客户端的端点与服务器的端点匹配。当您使用时,请确保您也使用相同的绑定。确保服务器正在侦听,并且服务器的防火墙不会阻止您。如果您对WCF服务进行了更改,请不要忘记为客户应用程序的服务参考再生。
您确定已定义了MEX端点吗?这就是提供有关您服务的元数据信息的原因,因此工作室可以生成客户端代理。
在您链接到的教程中,这是这样的:
// Step 4 Enable metadata exchange.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
如果要在IIS中托管Web服务,请在Web.config(在行为下)中检查
httpsgetEnabled设置为true
我今天遇到了一个类似的问题。但是,对我来说,正如@imortalitySX已经说过的那样,我不需要明确添加端点。
我有不同的原因:我与http://0.0.0.0绑定了,认为听力IP并不重要。实际上,通过soapui i 是能够连接和使用服务。但是,当试图在另一个Visual Studio项目中发现该服务时,该发现将失败,因为VS将获得初始响应,但随后遵循包含http://0.0.0.0的链接,然后失败。
因此,将http://0.0.0.0更改为我的机器的正确IP解决了我的问题。
尝试将URI地址放入浏览器中。就我而言,我能够看到一个异常。