【问题标题】:Hosting WCF service inside web project在 Web 项目中托管 WCF 服务
【发布时间】:2011-02-15 12:58:28
【问题描述】:

我正在尝试在 c# mvc web 项目中创建 wcf 服务。我添加了一个“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 中托管服务?看起来您没有为 .svc 安装正确的处理程序。另请注意,服务的名称属性和端点的合同属性必须包含包含名称空间的类型名称 - 但它不是您当前问题的根源。
  • 我确实想知道命名空间 - 认为由于它托管在同一个项目中,所以它们没有必要,但感谢您的澄清。我正在使用 Visual Studio 提供的默认服务器在 IIS 中运行它......不完全确定如果它们不存在,将如何安装正确的处理程序。
  • SVC 文件中的Service=... 应该引用服务的完全限定名称class - 例如Service=YourNamespace.Test。你的svc文件是这样的吗?这里的服务条目不是任何类型的 Web URL 或类似的东西......

标签: .net wcf


【解决方案1】:

根据你的描述,你应该没问题,但因为你不是:

  1. 您使用的是什么服务器? IIS,卡西尼?
  2. 您下载的 svc 文件的内容是什么? (用记事本打开)

要从 Visual Studio 内部启动测试工具,请右键单击 .svc 文件并“设置为起始页”,然后按 f5。这应该打开测试工具并允许您检查您的服务。这应该会给你一些关于问题所在的线索。

【讨论】:

  • 1) IIS, 2) 它是 .svc 服务中标记的 ASP.NET 标头,用于 ...如果我将其设置为起始页并按 f5,我的网站将启动并...下载 .svc 文件。
  • @Matt Thrower:请不要把这样的东西放到评论中——这几乎是不可能阅读的......相反:通过编辑它来更新你的原始问题(因为我在这种情况下为你做了) - 这对眼睛来说更容易!
【解决方案2】:

这听起来像是网络服务器配置问题;

  • 应用程序是否在 IIS 中标记为应用程序(是否有 cog)? - 它应该
  • 是配置为使用正确版本的 ASP.NET(即不是 1.x)的应用程序
  • 服务器上是否安装了 .NET 3.0 或更高版本?
  • 框架主 web.config 是否包含 .svc 映射?

是最后一个,我在这里看到了一个故障,即安装根本不会触及配置,如果它不是预期的那样;因此,如果您手动更改了服务器上的主 web.config,您可能需要手动应用 3.0 更改

例如,在&lt;buildProviders&gt; 你应该有类似(对于 3.0):

<add extension=".svc" type="System.ServiceModel.Activation.ServiceBuildProvider, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

&lt;httpHandlers&gt; 你应该有类似的东西(对于 3.0):

<add path="*.svc" verb="*" type="System.ServiceModel.Activation.HttpHandler, System.ServiceModel, Version=3.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" validate="false"/>

而且&lt;compilation&gt;/&lt;assemblies&gt;应该还有很多额外的东西,比如:

<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"/>

这只是来自快速扫描 - 可能还有其他的,确切的值可能会因环境而异。

【讨论】:

  • 奇怪的是,已经在 httpHandlers 下添加了一个 svc 服务 - 它是第 2 版,它映射到特定的 .svc 而不是 *.svc ...但没有其他东西。
  • @Matt - 首先,检查服务器上是否确实安装了 .NET 3.0;你也许可以安装它。手动修复仅在它存在但未更新 .config 的情况下
  • @Matt:强调一下:这是 master web.config,所以对于 ASP.NET 2.x,%systemroot%\Microsoft.NET\Framework\v2。 0.50727\CONFIG\web.config
  • 顺便说一句,我在 Visual Studio 的本地开发服务器版本的 IIS 下本地运行它。我有点假设所有这些都是默认安装的。而且我似乎没有主网络配置。
  • 当然可以 - 在框架文件夹中...如果您只有 .NET 4.0,那么只需从 %systemroot%\Microsoft.NET\Framework 开始;p
猜你喜欢
  • 2012-01-09
  • 1970-01-01
  • 2013-02-16
  • 1970-01-01
  • 2016-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-26
相关资源
最近更新 更多