.net和silverlight中的相对Web服务引用

时间:2009-09-08 16:48:33

标签: .net silverlight web-services

是否有可能使这些相对?

例如: webservice.asmx

而不是

http://servername/webservice.asmx

2 个答案:

答案 0 :(得分:2)

您需要编写自定义代码才能执行此操作。自定义代码有两部分:1)ASP.Net Silverlight主机站点需要通过初始参数将Silverlight应用程序传递给服务地址; 2)Application Start-Up事件需要处理初始参数以将服务指向正确的地址。

第1部分ASP.Net主机站点上的代码。这里有3个步骤:

A)添加包含服务名称

的web.config值
<appSettings>
  <clear/>
  <add key="MyServiceName" value="MyService.svc"/>        
</appSettings>

B)在页面加载事件中获取网页基地址,将服务地址附加到它,并将其保存到页面级变量

    // Page level variable for initial parameters
    public string InitParams { get; set; }

    protected void Page_Load(object sender, EventArgs e)
    {
        var serviceAddress =
            ConfigurationManager.AppSettings["MyServiceName"];

        var baseAddress = Request.Url.GetLeftPart(UriPartial.Authority);

        var fullAddress = string.Format("{0}/{1}", baseAddress, serviceAddress);

        // Pass parameters to SilverLight Application 
        InitParams = string.Format(
            "{0}={1}",
            "ServiceAddress",
            fullAddress);
    }

C)在托管silverlight控件的页面中,将初始设置为B中定义的页面级别变量。

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
    <param name="source" value="ClientBin/MySilverlightProject.xap"/>
    <param name="onError" value="onSilverlightError" />
    <param name="background" value="white" />
    <param name="minRuntimeVersion" value="3.0.40624.0" />
    <param name="autoUpgrade" value="true" />
    <param name="InitParams" value="<%=InitParams%>" />
    <a href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40624.0" style="text-decoration:none">
      <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style:none"/>
    </a>
     </object>

这里的关键是

<param name="InitParams" value="<%=InitParams%>" />

第2部分挂起App启动事件并将服务初始化为App.xaml.cs文件中的地址。

private void Application_Startup(object sender, StartupEventArgs e)
        {
            string serviceAddress = e.InitParams["ServiceAddress"];
            // INSERT CODE TO INITIALIZE YOUR SERVICE HERE
        }

答案 1 :(得分:0)

您可以编写自己的代码来提取当前服务的服务器路径,并将其添加到您要使用的服务之前。