【发布时间】:2013-06-17 04:06:38
【问题描述】:
我有一个自己托管 WCF 服务的控制台应用程序。当用户访问 asp.net 应用程序并单击页面上的按钮时,如何编写一些脚本来调用这个自托管的 WCF 服务(本地托管的服务)。我猜我的脚本有问题,请帮忙。
namespace SelfHost
{
[ServiceContract]
public interface IHelloWorldService
{
[OperationContract]
string SayHello(string name);
}
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class HelloWorldService : IHelloWorldService
{
public string SayHello(string name)
{
return string.Format("Hello, {0}", name);
}
}
class Program
{
static void Main(string[] args)
{
Uri baseAddress = new Uri("http://127.0.0.1/hello");
// Create the ServiceHost.
using (ServiceHost host = new ServiceHost(typeof(HelloWorldService), baseAddress))
{
// Enable metadata publishing.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
smb.MetadataExporter.PolicyVersion = PolicyVersion.Policy15;
host.Description.Behaviors.Add(smb);
// Open the ServiceHost to start listening for messages. Since
// no endpoints are explicitly configured, the runtime will create
// one endpoint per base address for each service contract implemented
// by the service.
host.Open();
Console.WriteLine("The service is ready at {0}", baseAddress);
Console.WriteLine("Press <Enter> to stop the service.");
Console.ReadLine();
// Close the ServiceHost.
host.Close();
}
}
}
调用服务的脚本
<script type="text/javascript">
function invokeService() {
$(document).ready(function () {
var userName = " test";
$.ajax({
type: "POST",
async: "false",
url: "http://127.0.0.1:8080/hello",
data: "{'name':'" + userName + "'}",
contentType: "application/json; charset=utf-8",
dataType: "json",
processData: true,
method: "SayHello",
success: function (result) {
AjaxSucceeded(result);
},
error: function (retult) {
AjaxFailed(result);
}
});
});
}
【问题讨论】:
-
我们需要查看您的自托管服务的配置文件!这就是配置绑定和行为等所有有趣的东西的地方 - 没有它,我们真的无能为力......但是调用自托管的 WCF 服务与调用 IIS 托管的 WCF 服务没有什么不同,真的 - 只需获取 WCF 的 ABC 正确(地址、绑定、合同),您就可以开始了!
-
当您尝试调用服务时,控制台应用程序是否正在运行?
-
从您的 WCF 服务看来,您正在使用 BasicHttpBinding 公开一个 SOAP 服务。如果您想从 JQuery/Ajax 调用您的服务而不是在您的 JQuery/Ajax 中构建完整的 SOAP 消息,那么最好使用 WebHttpBinding 公开 WCF 服务
-
通过 chrome 调试,似乎从脚本调用本地自托管服务是跨域的,我会尝试解决。
标签: c# jquery wcf console-application