【问题标题】:ServiceReference a self hosted WCF serviceServiceReference 自托管 WCF 服务
【发布时间】:2011-11-07 08:30:36
【问题描述】:

我目前正在维护和开发一个以 ajax 方式使用大量网络服务的网站。

服务的注册是在 aspx 中完成的,如下所示:

<asp:ScriptManagerProxy id="ScriptManager1" runat="server">
        <services>    
            <asp:ServiceReference Path="WebServices/WSAdministrator.asmx"></asp:ServiceReference>
        </services>
</asp:ScriptManagerProxy>

在 javascript 中使用服务是这样完成的

WSAdministrator.GetConsumerClubInfo(ConsumerClubId,
                                    OnSucceededToGetConsumerClubInfo,
                                    OnFailedToGetConsumerClubInfo);

我想知道我是否可以如此轻松地引用自托管 WCF 服务(在同一台机器上)。

有什么建议吗?

编辑:WCF 服务在 Windows 服务上运行,它公开了 webHttpBinding 和 basicHttpBinding 端点。

阅读ASP.Net WCF Service with no App_Code 后,我意识到我应该只创建一个 svc 文件作为对服务的引用。

我创建了这个 svc 文件:

<%@ ServiceHost Language="C#" Service="MyService.Namespace.Contract" %>

我在 web.config 文件中添加了以下几行:

        <services>
        <service name="MyService.Namespace.Contract">
            <endpoint address="setAddress" binding="basicHttpBinding" contract="MyService.Namespace.ContractInterface"/>
        </service>
    </services>

地址正常,但是当我尝试从 svc 访问引用时,我收到以下错误:

类型'',作为服务属性值提供 找不到 ServiceHost 指令。

我在这里错过了什么?

注意: 有一些很好的答案,但是对于我已经知道的所有事情,我的问题是关于如何使用 asp.net 引用我的自托管 WCF 服务,以便我可以从javascript,仅此而已,对此我仍然没有答案...

我看到一些对类似问题的回复告诉应该有一个 IIS 托管服务充当实际服务的“管道”,然后 ScriptManager 应该引用它,也许这是唯一的答案。 ..

【问题讨论】:

  • 我认为您可能将启用 AJAX 的 WCF 服务与通过 AJAX 调用 WCF 服务混为一谈?
  • 嗯...也许我是?最后,我只想从 javascript 调用 WCF Web 服务,如问题中所述。它通过引用它的 asmx 文件与 asmx Web 服务一起工作,但现在我不知道要写什么 ServiceReference,因为我没有 svc 文件。
  • 我也不确定。您是否尝试过将 Windows 服务主机定义的端点地址放入其中?我不知道这是否会奏效,但它可能会。另请注意,它需要在同一台机器(或同一域)上,因为您不能进行跨域调用。
  • 您是否建议添加一个 basicHttpBinding 端点,然后向该地址添加一个 ServiceReference?我认为这里缺少一些东西......
  • 没有。我建议尝试添加您的服务正在侦听的 URI(在 Window 服务的 app.config 文件中定义或在服务主机中以编程方式定义)并查看是否有效。您的 Windows 服务托管的 WCF 的端点地址是什么?

标签: asp.net ajax wcf web-services


【解决方案1】:

当然可以,而且使用 WCF 会像这样,

<asp:ServiceReference Path="~/WSAdministrator.svc" />

有关示例,请参阅 Herehere

【讨论】:

  • 我不确定我是否做错了什么...但是 WCF 是自托管的,我没有 svc 文件...
  • 当没有 svc 文件但 WCF 服务自托管在与 IIS 相同的机器上时,您知道该怎么做吗...?
  • .svc 文件是当您想在 IIS 或 Windows 激活服务 (WAS) 中托管 wcf 时使用的。有什么阻止您在托管服务时使用这两者中的任何一个吗?
  • 我在我的问题中发布了一些新信息,希望它可以帮助你:)
  • 你确定 svc 文件只是在 IIS 中托管时,我在问题中提出的链接说它也可以引用不在 IIS 上的代码。无论如何,该服务需要自托管,因为它独立于 IIS。
【解决方案2】:

当您自托管 WCF 服务时,您不使用 .SVC 文件,而是通过以下方式在 Windows 服务的 OnStart 方法中创建服务主机。

WebServiceHost myServiceHost = null;
if (myServiceHost != null)
{
    myServiceHost.Close();
}

myServiceHost = new WebServiceHost(typeof(YourClassName));
myServiceHost.Open();

如果您想托管您的服务以支持 WebHttpBinding,那么托管类应该是 WebServiceHost,如果您想托管 wsHttpBinding 或其他任何您应该使用 ServiceHost。

一旦服务开始运行,客户端就可以连接到它。

下面的link 包含一步一步的过程。

如果您必须支持能够使用 AJAX 和 Jquery 进行通信的 RESTful 服务,那么您应该使用 WebServiceHost,并且您可以通过以下方式装饰您的操作合同。

[ServiceContract()]
public interface IMyInterface
{
   [OperationContract]
   [WebInvoke(Method = "GET",
   ResponseFormat = WebMessageFormat.Json,
   UriTemplate = "GetArray",
   BodyStyle = WebMessageBodyStyle.Bare)]
   MyArray[] GetArray();
} 

您甚至可以在以下question 中找到一些相关信息。

【讨论】:

  • 嗨coolcake,我的服务工作正常。它已启动并正在运行。问题是如何将它作为服务参考集成到 asp.net 中,以便我可以从 javascript 中使用它。
  • 点击以下链接msdn.microsoft.com/en-us/library/dd203052.aspx。如果没有看到您的任何代码,很难找出您的问题是什么..
  • 您需要 RESTful WCF 服务才能使用 javascript 调用您的应用程序。
  • 我很乐意放任何需要的代码,但我不知道放什么,因为正如我所说的服务正在运行,我认为这是一个配置问题。关于您的第二条评论,ASP.NET 可以引用本地 Web 服务,然后在 javascript 中使用它,因此它不必是 RESTful 服务。
  • 我对你想要的东西感到困惑。或者我可能没有得到你的问题。是的,如果您想通过代理访问该服务,则您是正确的,您不需要宁静的服务
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多