在web项目中托管WCF服务
问题描述:
我试图在c#mvc web项目中创建一个wcf服务。我添加的类型为“WCF服务”的新项目,并添加所提供的接口测试方法:在web项目中托管WCF服务
[ServiceContract]
public interface ITest
{
[OperationContract]
void DoWork();
bool testWorking();
}
和所提供的服务:
public class Test : ITest
{
public void DoWork()
{
}
public bool testWorking()
{
return true;
}
}
然后,我已经走了过来web.config文件,并添加以下到system.ServiceModel标签:
<services>
<service name="Test" behaviorConfiguration="MyServiceTypeBehaviors">
<endpoint address="" binding="wsHttpBinding" contract="ITest">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"></endpoint>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyServiceTypeBehaviors" >
<serviceMetadata httpGetEnabled="true" />
</behavior>
</serviceBehaviors>
</behaviors>
在这一点上,据我了解,我应该能够在浏览器中查看这一点,并得到一个测试消息告诉我这是关于我的时间补充了客户使用这项服务。但实际发生的事情是,我的浏览器下载.svc文件!
两个问题:
1)到底什么是我做错了什么?为什么我没有看到预期的消息?
2)有什么办法可以自动启动WCF测试工具来运行此服务?我能找到的唯一指导方针是从WCF项目开始。
更新:(SVC文件的内容 - 从评论抢下)
<%@ ServiceHost Language="C#" Debug="true"
Service="myemployersaddress.com.Test" CodeBehind="Test.svc.cs" %>
答
从你描述你应该罚款,但因为你不是:
- 什么服务器你在用吗? IIS,cassini?
- 你下载的svc文件的内容是什么? (在记事本中打开)
要从visual studio中启动测试工具,请右键单击.svc文件并将其设置为起始页,然后按f5。这应该打开测试工具,并允许您检查您的服务。这应该给你一些问题的线索。
答
这听起来像是一个网络服务器配置问题;
- 是在IIS中标记为应用程序的应用程序(它是否有cog)? - 它应该是
- 是配置为使用正确版本的ASP.NET(即不是1.x)的应用程序
- 是.NET 3.0还是以上安装在服务器上?
- 框架大师web.config包含.svc映射吗?
再最后,我看到这里一个小故障,其中安装在所有不接触的配置,如果这是不太如何期望找到它;所以如果您手动更改了服务器上的主web.config,则可能需要手动应用3.0更改
例如,在<buildProviders>
中,您应该有类似的内容(对于3。0):
<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
在<httpHandlers>
你应该有像(3.0):
<add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>
而且应该有额外的东西主机在<compilation>/<assemblies>
,如:
<add assembly="System.Runtime.Serialization, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>
<add assembly="System.IdentityModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"/>
<add assembly="System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
<add assembly="System.ServiceModel.Web, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
<add assembly="System.WorkflowServices, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
这只是一个快速扫描 - 可能有其他的,并且确切的值可能会改变每个环境。
您是否在IIS中托管服务?看起来您没有为.svc安装正确的处理程序。另外请注意,服务的名称属性和端点的合同属性必须包含包含名称空间的类型名称 - 但它不是当前问题的根源。 – 2011-02-15 13:05:28
我确实对命名空间感到疑惑 - 因为它是在同一个项目中托管的,所以他们没有必要,但是谢谢澄清。我使用Visual Studio提供的默认服务器在IIS中运行此程序......并不完全知道如何安装正确的处理程序,如果它们不在那里的话。 – 2011-02-15 13:13:52
SVC文件中的`Service = ...`也应**引用服务**类的完全限定名 - 例如`服务= YourNamespace.Test`。这是你的svc文件中的情况?这里的服务条目不是任何类型的网址或类似的东西...... – 2011-02-15 13:42:41