نحوه ارسال دو پارامتر به تابع با در WCF
کدها زیر را در سرویس مورد نظر می نویسیم
[OperationContract]
[WebInvoke(UriTemplate = "Invoice", RequestFormat = WebMessageFormat.Json,BodyStyle=WebMessageBodyStyle.WrappedRequest, ResponseFormat = WebMessageFormat.Json, Method = "POST")]
OutputResultStruct<KeyValuePair<string, int>> AddToInvoice(Invoice invoice, List< InvoiceDetail> invoicedetail,int RequestId);
کلاسی که برای این کار نوشتیم تا بتواند هر ساختاری را قبول کند
public class OutputResultStruct<T> where T : struct
{
public bool IsValidResult { get; set; }
public int ErrorCode { get; set; }
public string Description { get; set; }
private List<T> _resultvalue;
public List<T> resultvalue
{
get
{
return (List<T>)_resultvalue;
}
set
{
_resultvalue = value;
}
}
}
و مقدار زیر را هم در Web Config قرار می دهیم تا در هنگام آدرس دهی مشکلی نداشته باشیم
<system.serviceModel>
<services>
<endpoint address="InvoiceService" binding="webHttpBinding" contract="HamrahMelk.IInvoiceService"
behaviorConfiguration="MyEndpointBehavior" name="InvoiceService" > </endpoint>
</services>
</system.serviceModel>
حال متدی که در فایل SVC می نویسیم به شکل زیر خواهد بود.
public OutputResultStruct<KeyValuePair<string, int>> AddToInvoice(Invoice invoice, List<InvoiceDetail> invoicedetail, int RequestId)
{
var OBJresult = new OutputResultStruct<KeyValuePair<string, int>>();
try
{
using (DataClassesDataContext Context = new DataClassesDataContext())
{
Invoice obj = new Invoice();
obj.UserId = invoice.UserId;
obj.RequestId = RequestId;
Context.Invoices.InsertOnSubmit(obj);
Context.SubmitChanges();
var Resultinvoicedetail = AddToInvoiceDetail(invoicedetail, obj.InvoiceId);
if (Resultinvoicedetail.IsValidResult==false)
{
Invoice ObjInvoiceDelete = Context.Invoices.Single(q => q.InvoiceId == obj.InvoiceId);
Context.Invoices.DeleteOnSubmit(ObjInvoiceDelete);
Context.SubmitChanges();
OBJresult.ErrorCode = Resultinvoicedetail.ErrorCode;
OBJresult.Description = Resultinvoicedetail.Description;
OBJresult.IsValidResult = false;
OBJresult.resultvalue = new List<KeyValuePair<string, int>>() ;
}
else
{
OBJresult.ErrorCode = Resultinvoicedetail.ErrorCode;
OBJresult.Description = Resultinvoicedetail.Description;
OBJresult.IsValidResult = true;
OBJresult.resultvalue = new List<KeyValuePair<string, int>>() { new KeyValuePair<string, int>("InsertId", obj.InvoiceId) };
}
}
}
catch (Exception ex)
{
OBJresult.ErrorCode = 2;
OBJresult.Description = ex.Message;
OBJresult.IsValidResult = false;
OBJresult.resultvalue = new List<KeyValuePair<string, int>>();
}
return OBJresult;
}