我创建了一个WCF服务,可以从SQL数据库中检索数据,并可以将数据更新和修改为SQL数据库。我试图从xamarin for android和xamarin for iOS调用WCF方法。我搜索了一个例子,如何从WCF服务调用PUT和POST方法,通过xamarin for android和xamarin for iOS但没有运气。我在下面添加了WCF代码以供参考。 ...甚至创建了Web API,但所有使用Web API的示例和教程都是关于如何调用GET方法的。我没有看到任何参考文档,它将展示如何通过跨平台从WCF或Web api调用PUT或Post方法。我通过Fiddler测试了WCF服务并且工作正常。下一步将是什么..我已经使用xlsrin文档中提到的SlsvcUtil.exe为此Web服务创建了代理。有人可以发布一个xamarin.Android的例子,它将从下面的wcf服务中调用Update或delete方法。正在寻找help.Service包含webHttp绑定。
WCF
Service1.svc.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Web;
using System.Text;
public class Service1 : IService1
{
public List GetDeptsList()
{
using (DeptDBEntities entities = new DeptDBEntities())
{
return entities.Depts.ToList();
}
}
public Dept GetDeptByID(string no)
{
try
{
int deptId = Convert.ToInt32(no);
using (DeptDBEntities entities = new DeptDBEntities())
{
return entities.Depts.SingleOrDefault(dept => dept.no == deptId);
}
}
catch
{
throw new FaultException("Something went wrong");
}
}
public void AddDept(string name)
{
using (DeptDBEntities entities = new DeptDBEntities())
{
Dept dept = new Dept { name = name };
entities.Depts.Add(dept);
entities.SaveChanges();
}
}
public void UpdateDept(string no, string name)
{
try
{
int deptId = Convert.ToInt32(no);
using (DeptDBEntities entities = new DeptDBEntities())
{
Dept dept = entities.Depts.SingleOrDefault(b => b.no == deptId);
dept.name = name;
entities.SaveChanges();
}
}
catch(Exception e)
{
throw new FaultException(e.Message);
}
}
public void DeleteDept(string no)
{
try
{
int deptId = Convert.ToInt32(no);
using (DeptAppDBEntities entities = new DeptAppDBEntities())
{
Dept dept = entities.Depts.SingleOrDefault(b => b.no == deptId);
entities.Depts.Remove(dept);
entities.SaveChanges();
}
}
catch
{
throw new FaultException("Something went wrong");
}
}
}
的web.config
<?xml version="1.0"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.4.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false"/>
</configSections>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>
</assemblies>
</compilation>
<pages controlRenderingCompatibilityVersion="4.0"/>
</system.web>
<system.serviceModel>
<serviceDebug includeExceptionDetailInFaults="false" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="WcfWithJsonP.Service1" behaviorConfiguration="restfulBehavior">
<endpoint address="" behaviorConfiguration="webBehavior" binding="webHttpBinding" bindingConfiguration="" contract="WcfWithJsonP.IService1"/>
<host>
<baseAddresses>
<add baseAddress="http://localhost/Service1"/>
</baseAddresses>
</host>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<endpointBehaviors>
<behavior name="webBehavior">
<webHttp defaultOutgoingResponseFormat="Json"/>
</behavior>
</endpointBehaviors>
<serviceBehaviors>
<behavior name="restfulBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true"/>
</system.serviceModel>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true"/>
<directoryBrowse enabled="true"/>
</system.webServer>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v12.0"/>
</parameters>
</defaultConnectionFactory>
</entityFramework>
</configuration
&GT;
的Main.axml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:minWidth="25px"
android:minHeight="25px">
<LinearLayout
android:orientation="vertical"
android:layout_width="134.1dp"
android:layout_height="fill_parent"
android:minWidth="25px"
android:minHeight="25px">
<TextView
android:text="Enter No:"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="163.4dp"
android:layout_height="wrap_content"
android:id="@+id/No"
android:layout_marginBottom="27.5dp"
android:layout_marginTop="0.0dp"
android:layout_marginLeft="5dp" />
<TextView
android:text="Enter name:"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="252.7dp"
android:layout_height="wrap_content"
android:id="@+id/Name"
android:layout_marginBottom="27.5dp"
android:layout_marginTop="0.0dp"
android:layout_marginLeft="5dp"
android:enabled="false"
android:visibility="invisible" />
</LinearLayout>
<Button
android:id="@+id/Get"
android:layout_width="fill_parent"
android:layout_height="36.6dp"
android:text="Get" />
<Button
android:id="@+id/ADD"
android:layout_width="fill_parent"
android:layout_height="36.6dp"
android:text="ADD" />
<Button
android:id="@+id/Update"
android:layout_width="fill_parent"
android:layout_height="36.6dp"
android:text="Update" />
<Button
android:id="@+id/Delete"
android:layout_width="fill_parent"
android:layout_height="36.6dp"
android:text="Delete" />
<TextView
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ValueNo"
android:layout_marginBottom="27.5dp"
android:layout_marginTop="0.0dp"
android:background="@android:color/holo_purple" />
<TextView
android:text=""
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/ValueName"
android:layout_marginBottom="27.5dp"
android:layout_marginTop="0.0dp"
android:background="@android:color/holo_purple" />
</LinearLayout>
答案 0 :(得分:0)
以下是一个简单的代码段,可用作指南:
//first at the class level, create a private variable for the client.
private Service1Client _client;
private Button _addButon;
private TextView _txtDeptName;
//Initialize the _client in the OnCreate() method.
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
var endpoint = new EndpointAddress("http://<ipAddress:port>/Service1.svc");
var binding = new BasicHttpBinding{
Name = "basicHttpBinding",
MaxBufferSize = 2147483647,
MaxReceivedMessageSize = 2147483647
};
TimeSpan timeout = new TimeSpan(0, 0, 30);
binding.SendTimeout = timeout;
binding.OpenTimeout = timeout;
binding.ReceiveTimeout = timeout;
_client = new Service1Client(binding, endpoint);
_client.AddDeptCompleted += ClientAddDeptCompleted;
_addButton = FindViewById<Button>(Android.Resources.Id.Add);
_addbutton.Click += AddButton_Clicked;
_txtDeptName = FindViewbyId<TextView>(Android.Resources.Id.Name);
}
//Then within the event handlers, do something like this
public void AddButton_Clicked(object sender, EventArgs e)
{
_client.AddDeptAsync(_txtDeptName.Text);
}
//Handle the request completed event.
private void ClientAddDeptCompleted(object sender, AddDeptCompletedEventArgs addDeptCompletedEventArgs)
{
//TODO: Something with the notification that the request has completed.
}
您也应该能够按照其他按钮和服务调用的类似模式。如果我做了一些错别字,我道歉。我来自Xamarin网站上的一些内存和一些WCF指令。
答案 1 :(得分:0)
首先,您必须将服务添加到项目中 您可以使用以下命令执行此操作:
Cd C:\ Program Files(x86)\ Microsoft SDKs \ Silverlight \ v5.0 \ Tools \ SlSvcUtil.exe http://localhost:2323/HisDashboardService/ProfilerService.svc /目录:“C:\ Folder”
然后添加到创建的项目文件中 要使用添加的服务,必须遵循以下步骤
$pdf->Output('D','myfile.pdf');