【问题标题】:How can I send parameters for ASP.NET webservice如何为 ASP.NET Web 服务发送参数
【发布时间】:2013-12-30 16:17:43
【问题描述】:

我有一个大学项目,我应该在其中实现一个使用 Web 服务的 java 驱动的网站:一些将被创建为 servlet,而另一些则应该被创建为 .NET“servlet”。我创建了可以称为 /loginservice/username="__________"&md5="____________" 的 java servlet。都好。 现在我必须在.NET 中实现另一个服务。我创建了一个 ASP.NET Web 服务应用程序,但这种类型的应用程序使用 POST 而不是 GET。我发现这可以通过添加来改变

[ScriptMethod(UseHttpGet=true)]

但问题是我不能像在 Java 中那样传递参数。 无法在任何地方使用 POST,因为我不想用 Java 重写代码。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.Script.Services;

namespace t5_services
{
    /// <summary>
    /// Summary description for Service1
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line. 
   // [System.Web.Script.Services.ScriptService]
    public class Service1 : System.Web.Services.WebService
    {

        [WebMethod]
        public string HelloWorld()
        {
            return "Hello World";
        }

        [WebMethod]
        [ScriptMethod(UseHttpGet=true)]
        public string Package(String packagename, String lastname)
        {
            return "Hello " + packagename + ": " + lastname;
        }

    }
}

这是 C# 中的代码 如果我使用浏览器并手动插入值一切正常。

但我不能使用 GET 约定。 提前谢谢你。

【问题讨论】:

  • ASMX 是一项遗留技术,不应用于新开发。 WCF 或 ASP.NET Web API 应用于 Web 服务客户端和服务器的所有新开发。一个提示:微软已经在 MSDN 上停用了ASMX Forum
  • 感谢您提供的信息。最大的问题是微软过快地淘汰技术。对于像我这样的新手来说,很难找到一个关于新主题的好教程。另外,我对 Microsoft 网络技术并不是很感兴趣,但我有一份大学作业,我必须遵守规则。
  • WCF 不是新技术。它从 2006 年就开始了。你们的大学远远落后于时代。
  • 也许你每天都在处理 WCF 主题。但对我来说,也许我的大学这个话题仍然很热门:))。如果我可以这么说,大学课程驱使我们从宇宙的开始。 :D.
  • 不要轻视 Señor Saunders,但 Nucandrei 是正确的。如果你问我,WCF 很难在没有性能提升的情况下配置。虽然有时 10% 很关键,但大多数时候,ASMX 的配置要宽容得多。

标签: c# web-services post get asmx


【解决方案1】:

我终于通过删除解决了问题

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]

并添加

<webServices>
     <protocols>
        <add name="HttpGet"/>
        <add name="HttpPost"/>
     </protocols>
</webServices>

到 Web.config

现在我可以使用

调用服务了
http://localhost:2586/Service1.asm/HelloWorld?parameter1=abc&parameter2=cde

【讨论】:

  • 很好地找到了解决方案,感谢您将其发布在这里以供未来的访问者使用。
  • 对于未来的访问者,将webServices 部分放入&lt;configuration&gt; &lt;system.web&gt; 标签内。
【解决方案2】:

这是我如何在 WCF 中执行此操作的示例。我相信这对于您的 Asp.net 服务来说会非常相似。如果不出意外,它应该为您指明正确的方向。

这是你的接口文件中的函数声明。

[OperationContract]
[WebInvoke(Method = "GET",
    ResponseFormat = WebMessageFormat.Json,
    BodyStyle = WebMessageBodyStyle.Wrapped,
    UriTemplate = "DoWork?message={message}&message2={message2}")]
string DoWork(string message, string message2);

这进入实现该接口的类。

    public string DoWork(string message, string message2)
    {
        return "foobar";
    }

您的 GET 请求将类似于 http://yoursite.com/DoWork?message=param1&message2=param2

【讨论】:

  • 我创建了一个 WCF 并编写了您提供的代码。当我输入 localhost:1290/Service1.svc/DoWork?message1=acg&message2=msga 时会出现一个空白页面。
  • 你的 web.config 中有 httpGetEnabled=true 吗?
  • 我找到了解决方案。请看下面的答案。问题之一是 GET 被禁用。
【解决方案3】:

这有帮助吗?抱歉回复的太短了,收拾行李回家了。

$.ajax & passing data to .asmx webservice

【讨论】:

  • 我需要一个浏览器 url 才能输入,这样我才能检查服务是否正常工作。该服务将在JSF(JavaServerFaces)中使用,与jQuery无关。
猜你喜欢
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多