WCF如何启用元数据?

我试图让我的svc文件在IIS下工作。 在我的项目中,当我按F5时,我得到了svc工作。 所以我知道一切都好,对吧? 除了IIS。

我正在使用Windows XP Pro计算机,在IIS中我添加了一个虚拟目录。

这是我的代码:IcarePlanActions(项目:A)

namespace WcfServiceLibrary { [ServiceContract] public interface ICarePlanActions { [OperationContract] List GetAllClients(); } } 

客户:(项目:A)

 namespace WcfServiceLibrary { public class Client : ICarePlanActions { public List GetAllClients() { List clients = new List(); clients.Add("Hendrik de Jong"); clients.Add("Miep de Berg"); clients.Add("Jaap Jongeneel"); clients.Add("Joop Prakman"); clients.Add("Pieter Schaakman"); return clients; } } } 

Web.config(项目:B)

                          

CarePlan.svc

  

当我使用wfctestclient运行此服务(在IIS上)时,我收到此错误

错误:无法从http://localhost/CarePlanService/CarePlan.svc获取元数据如果这是您有权访问的Windows(R)Communication Foundation服务,请检查您是否已在指定地址启用元数据发布。

我究竟做错了什么?

我没有让IIS下的服务工作。 首先,我手动创建一个虚拟目录,并指向svc所在的directiry。 这没用。 我不知道为什么。

然后我转到Visual Studio并更改了服务器设置(右键单击项目,属性,选项卡Web,单击Use local IIS Web Server ,然后单击Create Virtual Directory 。当我这样做时,它在IIS下使用上面的代码工作。

首先,删除客户端中的[DataContract]属性。

然后,重新编译并确保您的虚拟目录的/ bin目录中包含WcfServiceLibrary.dll。

您的配置应使用此端点进行metadataexchange:

  

我没有让IIS下的服务工作。 首先,我手动创建一个虚拟目录,并指向svc所在的directiry。 这没用。 我不知道为什么。

然后我转到Visual Studio并更改了服务器设置(右键单击项目,属性,选项卡Web,单击使用本地IIS Web服务器,然后单击创建虚拟目录。当我这样做时,它在IIS下使用上面的代码工作。

您将数据协定引用为服务的实现。 那是无效的。

 [DataContract] public class Client : ICarePlanActions {  

更改此项以引用您的服务的实施! 您的服务实施情况如何?

也许你应该从Client类中删除DataContract属性。 这也不是你的“客户”,而是服务的实施。

  1. 运行"\%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i

  2. 删除虚拟目录并再次创建。

只需检查Service.svc文件中的服务名称即可

  

希望它能奏效。

确保您的服务命名空间和服务名称对应于App.config文件。

             namespace WcfCustomLibrary { // NOTE: You can use the "Rename" command on the "Refactor" menu to change the class name "Service1" in both code and config file together. public class Service1 : IService1 {