如何从HTML网站调用WCF操作?

时间:2012-06-15 20:58:22

标签: c# wcf web-services

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

我目前使用以下代码创建了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服务的东西。

由于

4 个答案:

答案 0 :(得分: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>

答案 1 :(得分:0)

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

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

(更多结果不仅仅是这一个提出simple search。)

答案 2 :(得分:0)

正如你所说: -

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

但是,这个问题似乎通过使用ScriptManager [ Not Tried but ]得到了解决。请参阅此处了解完整示例步骤

但是,请参阅两个解决方案。

答案 3 :(得分:0)

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