如何将服务引用添加到嵌入式文件?

时间:2010-04-03 17:20:04

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

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

    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文件路径,有没有办法添加嵌入文件?我希望将所有内容保存在我的类库中,而不是将文件放入网站文件夹中。

1 个答案:

答案 0 :(得分:0)

如果我理解你所问的是什么,这是不可能的,因为WebService是一个实际的编译类,而WebMethod是一个实际的编译方法。

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

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

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