【发布时间】:2014-11-03 06:13:57
【问题描述】:
我创建了一个 WCF 服务,该服务从 SQL 数据库中检索数据,并且可以将数据更新和修改到 SQL 数据库中。我正在尝试从 xamarin for android 和 xamarin for iOS 调用 WCF 方法。我搜索了很多关于如何通过 xamarin for android 和 xamarin for iOS 从 WCF 服务调用 PUT 和 POST 方法的示例,但没有运气。我在下面添加了 WCF 代码以供参考。 ...甚至创建了 Web API,但所有使用 Web API 的示例和教程都是关于如何调用 GET 方法的。我没有看到任何参考文档显示如何跨平台从 WCF 或 Web api 调用 PUT 或 Post 方法。我已经通过 Fiddler 测试了 WCF 服务并且工作正常。下一步是什么..我已经使用 SlsvcUtil.exe 为这个 Web 服务创建了代理,如 xamarin 文档中所述。有人可以发布一个 xamarin.Android 的示例,它将从下面的 wcf 服务调用更新或删除方法。拼命寻找帮助。服务包含 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
>
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>
【问题讨论】:
-
我已经添加了 config.file,我正在 Xamarin 中创建简单的 android 项目来使用这个服务。
-
您是否按照 Xamarin 网站上的说明进行操作? developer.xamarin.com/guides/cross-platform/… 很详细。如果您对说明有疑问,能否更具体地说明哪些部分?
-
是的,我做了,我创建了代理并添加到我的项目中。基本上,当我们单击按钮时,我想添加或删除记录。当点击添加按钮时,输入文本框中的值必须通过 wcf 服务添加到数据库中。如果单击获取按钮,则必须从 WCF 服务检索输入数字文本框中输入的值,即 GetDeptById,并且必须显示在文本框中。没有文本框必须显示没有。并且名称文本框必须显示名称。
-
优秀。因此,您现在需要做的就是在您的 Xamarin.Android 项目中创建一些按钮和单击事件处理程序。在事件处理程序中或在类级别,创建在代理中定义的服务客户端的新实例,并调用 AddDept 或 DeleteDept 方法。代理的生成会根据创建代理的服务为您创建这些方法。
-
我在这里添加我的 xml。但不知道如何开始或添加什么
标签: c# wcf xamarin xamarin.android