【问题标题】:How to call WCF operation from a HTML website?如何从 HTML 网站调用 WCF 操作?
【发布时间】:2012-06-15 20:58:21
【问题描述】:

我遇到了一个小问题,导致我正在尝试实现的功能停止开发。

我目前有一个使用以下代码创建的 WCF Web 服务:

 [ServiceContract(Namespace = "http://Sinvise.Service/")]
    public interface ISinvise
    {
        [OperationContract]
        void Output(string value);
    }

    class SinviseService : ISinvise
    {
        second sec = new second();

        public void Output(string value)
        {
            sec.message(value);
        }
    }

主要方法:

var ip = getIP();
            Uri baseAddr = new Uri("http://"+ip+":60185/Sinvise");
            ServiceHost localHost = new ServiceHost(typeof(SinviseService), baseAddr);
            Console.WriteLine("Current System IP: " + getIP());
            try
            {
                Process.Start(baseAddr.AbsoluteUri);
                localHost.AddServiceEndpoint(typeof(ISinvise), new BasicHttpBinding(), "SinviseService");

                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                localHost.Description.Behaviors.Add(smb);

                localHost.Open();
                Console.WriteLine("Service initialized.");
                Console.WriteLine("Press the ENTER key to terminate service.");
                Console.ReadLine();

                localHost.Close();
            }
            catch (CommunicationException ex)
            {
                Console.WriteLine("Oops! Exception: {0}", ex.Message);
                localHost.Abort();
            }

应用程序设置了要在我的应用程序中调用的 Web 服务,现在我要做的是使用 HTML 页面来调用操作。它们是将值传递给应用程序的简单操作。

现在我知道 HTML 自己无法做到这一点,并且 PHP 不会成为这方面的选择,因为它需要我在我的应用程序部署中打包一个 Web 服务器和 PHP(我不能我的应用程序需要付款,因此不能包含任何开源软件)。

我在使用 jQuery 时遇到问题,因为它不能以跨域方式使用。

Web 服务与 ASP.NET 无关,但我需要一些允许我的软件用户能够使用 HTML 页面调用 Web 服务的东西。

谢谢

【问题讨论】:

    标签: c# wcf web-services


    【解决方案1】:

    如果我的理解是正确的并且基于此:

    我在使用 jQuery 时遇到问题,因为它不能以跨域方式使用。

    您的服务在另一个域中,然后以最简单的方式进行,在您的域中创建一个 REST 服务,然后包装对外部服务的调用

    看到这个问题

    这是创建 REST 服务的演练(无 SVC 文件,可用于 ASP.Net 或 MVC 应用程序)

    Datalist Delete Command Event implementation using Page Methods

    这是一个完整的应用程序,您可以下载使用 REST 服务

    http://sdrv.ms/LJJz1K

    例子:

    [ServiceContract]
    public interface IMyService
    {
        [OperationContract]
        [WebInvoke(
            ResponseFormat = WebMessageFormat.Json, 
            RequestFormat = WebMessageFormat.Json,
            UriTemplate = "/DeleteFromService",
            Method = "DELETE")]
        void Delete(int id);
    }
    
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class MyService : IMyService
    {
        public void Delete(int id)
        {
            // wrap here the call to your external service
            // simulate a long process
            Thread.Sleep(5000);
        }
    }
    

    在页面中

    <script type="text/javascript" language="javascript">
            function deleteFromService() {
                $.blockUI();
                $.ajax({
                    cache: false,
                    type: "DELETE",
                    async: true,
                    url: "/DeleteFromService",
                    data: "3", // get your id to delete
                    contentType: "application/json",
                    dataType: "json",
                    success: function () {
                        $(document).ajaxStop($.unblockUI); 
                        alert("done");
                    },
                    error: function (xhr) {
                        $(document).ajaxStop($.unblockUI); 
                        alert(xhr.responseText);
                    }
                });
            }
            jQuery().ready(function () {
                            $("#myButton").click(deleteFromService);
            });
        </script>
    

    【讨论】:

    • 谢谢,但问题是我的 HTML 页面像 file://C:\index.html 和我的服务是 localhost:65201 显然 HTML 页面无法与之通信
    【解决方案2】:

    如果您希望它不需要服务器端代码,您至少需要使用客户端代码。 (JavaScript)。

    这是一个如何直接使用 JavaScript 调用 Web 服务的示例:http://dotnetbyexample.blogspot.com/2007/10/calling-asmx-web-services-directly-from.html

    (比这更多的结果是simple search。)

    【讨论】:

    • 正如我指出的它不是 ASP.NET Web 服务,该 Web 服务是从我的问题中的代码生成的
    【解决方案3】:

    如你所说:-

    I am having a problem using jQuery as it can not be used in a cross domain manner

    但是,这个问题似乎通过使用ScriptManager [未尝试]得到解决。请参阅此处以逐步了解完整示例

    但是,请参考这两种解决方案。

    【讨论】:

    • 正如我提到的使用带有 JSON 序列化程序的 REST 服务。您还可以为跨域问题使用 JSONP。看一看,您肯定会发现它对您的情况有益。我希望如此..
    • 评论来自问题,解决方案在根据评论提供的链接中。
    【解决方案4】:

    如果你现在真的想使用 HTML。你应该看看 REST 服务。看看 WCF 数据服务或 Asp.net WebApi。您可以找到很多教程,帮助您轻松实现服务,并让您在 HTML 中使用 jquery 进行查询。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多