【问题标题】:How to add ServiceReference to an embedded file?如何将服务引用添加到嵌入文件?
【发布时间】:2011-02-04 01:07:49
【问题描述】:

我有一个类库。在其中一个类中,我在页面上添加了一个脚本引用,如下所示:

    protected override void OnPreRender(EventArgs e)
    {
        base.OnPreRender(e);
        if (this.Page != null)
        {
            ScriptManager sm = ScriptManager.GetCurrent(this.Page);
            ServiceReference reference = new ServiceReference("~/Admin/Services/ContactsService.asmx");
            reference.InlineScript = true;
            sm.Services.Add(reference);
        }
    }

对于 ServiceReference 文件路径,有没有办法改为添加嵌入文件?我想将所有内容都保留在我的类库中,而不是将文件放入网站文件夹中。

【问题讨论】:

  • Web 服务必须存在,这意味着可以通过 url 访问,因此您不能只嵌入 .asmx 文件并使用资源访问它。您是否尝试在自己的库中引用服务,如果是,请添加对它的常规引用,而不是通过网络服务。
  • 它在同一个库中,但我需要通过 Javascript 调用 WebMethod。是否仍然可以添加常规参考(不确定您的意思)?另外,我知道它必须通过真实的 URL 存在,所以我不能这样做: new ServiceReference(Page.ClientScript.GetWebResourceUrl(this.GetType(), "MyLibrary.Services.FormsService.asmx"))错误说不支持,但也许我做错了什么。
  • 我在这里可能有点过头了,但是您可以在 .aspx 文件中定义 [WebMethods] 并从 javascript 中调用它们。检查此链接以获取信息 - dotnetcurry.com/ShowArticle.aspx?ID=109。这样您就可以将其全部包含在您正在创建的页面或您使用库的页面中。

标签: c# asp.net web-services .net-3.5 class-library


【解决方案1】:

如果我正确理解您的要求,这是不可能的,因为 WebService 是实际编译的类,WebMethod 是实际编译的方法。

GetWebResourceUrl 方法顾名思义,返回一个资源。客户端脚本(Javascript)只是一个字符串资源,它不需要在服务器上执行,它只是作为文本发送给客户端。 Web 服务(及其方法)需要具有能够响应客户端请求并执行此代码的物理端点。

理论上,如果您使用 WCF,您可以在运行时确定服务端点的 URL,因为 WCF 将端点与行为分离,并在 web.config 中的特定位置定义它。这不允许您以WebResource 的形式提供整个“服务”,但可以避免对 URL 进行硬编码。如果您使用的是 ASMX WebServices,那么您甚至没有该选项,因为 ASMX 使用类似于 ASP.NET 页面的标记文件。

如果您担心 URL 可能会更改,即因为您将此网站部署在多个服务器/域上,那么最好的办法是将 URL 作为应用程序设置进行外部化。这样,您只需编辑 web.config 即可更改用于脚本引用的 URL。

【讨论】:

    猜你喜欢
    • 2014-07-03
    • 2016-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多