Я использую следующий код на локальном компьютере, чтобы предоставить мне временную службу WCF:
using System;
using System.Windows.Forms;
using System.ServiceModel;
using TestService;
namespace TestClient
{
public partial class Form1 : Form
{
IService1 patientSvc = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
EndpointAddress address = new EndpointAddress(new Uri("net.tcp://localhost:2202/PatientService"));
NetTcpBinding binding = new NetTcpBinding();
ChannelFactory<IService1> factory = new ChannelFactory<IService1>(binding, address);
patientSvc = factory.CreateChannel();
}
}
}
А, класс1:
using System;
using System.Collections.Generic;
using System.Text;
using System.ServiceModel;
using System.Runtime.Serialization;
namespace TestService
{
[ServiceContract()]
public interface IService1
{
[OperationContract]
Patient GetPatient(Int32 index);
[OperationContract]
void SetPatient(Int32 index, Patient patient);
}
[ServiceBehavior(IncludeExceptionDetailInFaults = true)]
public class PatientService : IService1
{
Patient[] pat = null;
public PatientService()
{
pat = new Patient[3];
pat[0] = new Patient();
pat[0].FirstName = "Bob";
pat[0].LastName = "Chandler";
pat[1] = new Patient();
pat[1].FirstName = "Joe";
pat[1].LastName = "Klink";
pat[2] = new Patient();
pat[2].FirstName = "Sally";
pat[2].LastName = "Wilson";
}
public Patient GetPatient(Int32 index)
{
if (index <= pat.GetUpperBound(0) && index > -1)
return pat[index];
else
return new Patient();
}
public void SetPatient(Int32 index, Patient patient)
{
if (index <= pat.GetUpperBound(0) && index > -1)
pat[index] = patient;
}
}
[DataContract]
public class Patient
{
string firstName;
string lastName;
[DataMember]
public string FirstName
{
get { return firstName; }
set { firstName = value; }
}
[DataMember]
public string LastName
{
get { return lastName; }
set { lastName = value; }
}
}
}
Это прекрасно работает, если мне позвонили на PatientService с "1". Он показывает мне значения Джо и Клинк .
Однако, сделайте то же самое на странице моего сайта ASP.net со следующим:
.cs страница:
@{
ViewBag.Title = ViewBag.Message;
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="col-sm-offset-2 col-sm-8" style="margin-bottom: 10px; margin-top: 10px; text-align: center;">
<Button class="tips btn btn-success btn-outline" style="margin-right: 10px;" id="WCF" data-tooltip="@Html.Raw(tips["Continue"])">WCF TEST</Button>
</div>
И JavaScript:
$(document).ready(function () {
$("#WCF").on("click", function () {
$.ajax({
type: "POST",
url: ajaxDirPath + "WCF",
data: '{"patNum": "1"}',
contentType: "application/json", // content type sent to server
success: ServiceSucceeded,
error: ServiceFailed
});
});
});
function ServiceFailed(result) {
console.log('Service call failed: ' + result.status + ' ' + result.statusText);
}
function ServiceSucceeded(result) {
resultObject = result.MyFunctionResult;
console.log("Success: " + resultObject);
}
И код позади:
[HttpPost]
public string WCF(string patNum)
{
Dictionary<string, string> resultsBack = new Dictionary<string, string>();
EndpointAddress address = new EndpointAddress(new Uri("net.tcp://localhost:2202/PatientService"));
NetTcpBinding binding = new NetTcpBinding();
ChannelFactory<IService1> factory = new ChannelFactory<IService1>(binding, address);
IService1 patientSvc = factory.CreateChannel();
Patient patient = patientSvc.GetPatient(Convert.ToInt32(patNum));
if (patient != null)
{
resultsBack.Add("dback", "GOOD");
resultsBack.Add("return1", patient.FirstName);
resultsBack.Add("return2", patient.LastName);
}
return JsonConvert.SerializeObject(resultsBack, Formatting.Indented);
}
Переменная Patient равна NULL для всего, что возвращается.
Что бы я делал неправильно?
UPDATE
Это шаги в отладке как из JavaScript, так и из службы WCF:
Далее ->
Далее ->
Далее ->
Далее ->
Далее ->