我正在尝试让我的svc文件在IIS下运行。在我的项目中,当我按F5时,我得到了svc工作。所以我知道一切都好,对吧?除了IIS。
我正在使用Windows XP Pro计算机,在IIS中我添加了一个虚拟目录。
这是我的代码: IcarePlanActions(项目:A)
namespace WcfServiceLibrary
{
[ServiceContract]
public interface ICarePlanActions
{
[OperationContract]
List<string> GetAllClients();
}
}
客户:(项目:A)
namespace WcfServiceLibrary
{
public class Client : ICarePlanActions
{
public List<string> GetAllClients()
{
List<string> clients = new List<string>();
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)
<configuration>
<system.serviceModel>
<services>
<service behaviorConfiguration="CarePlanService.Service1Behavior"
name="WcfServiceLibrary.Client">
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceLibrary.ICarePlanActions">
<identity>
<dns value="localhost" />
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="CarePlanService.Service1Behavior">
<!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
<serviceMetadata httpGetEnabled="true"/>
<!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information -->
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
CarePlan.svc
<%@ ServiceHost Language="C#" Debug="true" Service="WcfServiceLibrary.Client" %>
当我使用wfctestclient运行此服务(在IIS上)时,我收到此错误
错误:无法从中获取元数据 http://localhost/CarePlanService/CarePlan.svc 如果这是Windows(R)通信 您拥有的基础服务 访问,请检查您有 启用了元数据发布 指定地址。
我做错了什么?
解
我没有在IIS下使用该服务。首先,我手动创建一个虚拟目录,并指向svc所在的directiry。这没用。我不知道为什么。
然后我转到Visual Studio并更改了服务器设置(右键鼠标在项目,属性,选项卡Web上,单击Use local IIS Web Server
并单击Create Virtual Directory
。当我这样做时,它在IIS下工作上面的代码。
答案 0 :(得分:7)
首先,删除客户端中的[DataContract]属性。
然后,重新编译并确保您的虚拟目录的/ bin目录中有WcfServiceLibrary.dll。
您的配置应使用此端点进行metadataexchange:
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange"/>
答案 1 :(得分:5)
解
我没有在IIS下使用该服务。首先,我手动创建一个虚拟目录,并指向svc所在的directiry。这没用。我不知道为什么。
然后我转到Visual Studio并更改了服务器设置(右键鼠标在项目,属性,选项卡Web上,单击使用本地IIS Web服务器并单击创建虚拟目录。当我这样做时,它在IIS下使用代码工作上方。
答案 2 :(得分:2)
您引用数据协定作为服务的实现。那是无效的。
[DataContract]
public class Client : ICarePlanActions
{
<service behaviorConfiguration="CarePlanService.Service1Behavior"
name="WcfServiceLibrary.Client">
更改此项以引用您的服务的实施!您的服务实施情况如何?
也许你应该从Client类中删除DataContract属性。这也不是你的“客户”,而是服务的实施。
答案 3 :(得分:0)
运行"\%windir%\Microsoft.NET\Framework\v3.0\Windows Communication Foundation\ServiceModelReg.exe" -i
删除虚拟目录并重新创建。
答案 4 :(得分:0)
只需检查Service.svc
文件
<ServiceHost Language="C#" Debug="true" Service="SvcCalculator.**Calculator**"
CodeBehind="**Calculator.svc.cs**" %>
希望它能够发挥作用。
答案 5 :(得分:0)
确保您的服务命名空间和服务类名称与 App.config 文件相对应。
<system.serviceModel>
<services>
<service name="WcfCustomLibrary.Service1">
<host>
<baseAddresses>
<add baseAddress = "http://localhost:8733/Design_Time_Addresses/WcfServiceLibrary/Service1/" />
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
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
{