我创建了从android获取数据的服务并将它们保存到SQL中。我正在使用IIS 7
我的代码:
namespace WcfService_SuiviColis
{
// REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom d'interface "IService1" à la fois dans le code et le fichier de configuration.
[ServiceContract]
public interface IService1
{
[OperationContract]
[WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, RequestFormat= WebMessageFormat.Json, BodyStyle =WebMessageBodyStyle.Wrapped, UriTemplate = "SaveData")]
void SaveData(Pers_Ordre_NET oData);
}
[DataContract]
public class Pers_Ordre_NET
{
[DataMember]
string _CodeClient;
public string CodeClient
{
get { return _CodeClient; }
set { _CodeClient = value; }
}
[DataMember]
string _CodeDest;
public string CodeDest
{
get { return _CodeDest; }
set { _CodeDest = value; }
}
[DataMember]
string _NoOrdre;
public string NoOrdre
{
get { return _NoOrdre; }
set { _NoOrdre = value; }
}
[DataMember]
string _DateTampon;
public string DateTampon
{
get { return _DateTampon; }
set { _DateTampon = value; }
}
[DataMember]
string _GeoPos;
public string GeoPos
{
get { return _GeoPos; }
set { _GeoPos = value; }
}
[DataMember]
string _StsOrdre;
public string StsOrdre
{
get { return _StsOrdre; }
set { _StsOrdre = value; }
}
[DataMember]
string _Camion;
public string Camion
{
get { return _Camion; }
set { _Camion = value; }
}
}
}
和service.svc.cs
:
namespace WcfService_SuiviColis
{
// REMARQUE : vous pouvez utiliser la commande Renommer du menu Refactoriser pour changer le nom de classe "Service1" dans le code, le fichier svc et le fichier de configuration.
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
public class Service1 : IService1
{
public void SaveData(Pers_Ordre_NET oOrdre)
{
try
{
using (var connectionWrapper = new Connexion())
{
var connectedConnection = connectionWrapper.GetConnected();
string sql_Adding = "INSERT INTO [SUIVI_ORDRE]"+
" ([CODE_CLIENT] ,[CODE_DEST],[NO_ORDRE],[DATE_TAMPON],[GPS_POS],[STATUS_ORDRE],CAMION)"+
"VALUES (@CODE_CLIENT,@CODE_DEST,@NO_ORDRE,@DATE_TAMPON,@GPS_POS,@STATUS_ORDRE,@CAMION)";
SqlCommand comm_Insrt = new SqlCommand(sql_Adding, connectionWrapper.conn);
comm_Insrt.Parameters.AddWithValue("@CODE_CLIENT", oOrdre.CodeClient);
comm_Insrt.Parameters.AddWithValue("@CODE_DEST", oOrdre.CodeDest);
comm_Insrt.Parameters.AddWithValue("@NO_ORDRE", oOrdre.NoOrdre);
comm_Insrt.Parameters.AddWithValue("@DATE_TAMPON", oOrdre.DateTampon);
comm_Insrt.Parameters.AddWithValue("@GPS_POS", oOrdre.GeoPos);
comm_Insrt.Parameters.AddWithValue("@STATUS_ORDRE", oOrdre.StsOrdre);
comm_Insrt.Parameters.AddWithValue("@CAMION", oOrdre.Camion);
comm_Insrt.ExecuteNonQuery();
}
}
catch (Exception excThrown)
{
throw new Exception(excThrown.Message);
}
}
}
}
和web.config
:
<system.serviceModel>
<services>
<service name="WcfService_SuiviColis.Service1" behaviorConfiguration="ServiceBehaviour">
<endpoint
address="SaveData"
behaviorConfiguration="httpBehavior"
binding="webHttpBinding"
contract="WcfService_SuiviColis.IService1" />
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehaviour">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
<endpointBehaviors>
<behavior name="httpBehavior">
<webHttp/>
</behavior>
</endpointBehaviors>
</behaviors>
<serviceHostingEnvironment multipleSiteBindingsEnabled="true">
</serviceHostingEnvironment>
</system.serviceModel>
<system.webServer>
<security>
<requestFiltering>
<verbs>
<add verb="POST" allowed="true"/>
</verbs>
<fileExtensions>
<add fileExtension=".svc" allowed="true"/>
</fileExtensions>
</requestFiltering>
</security>
<directoryBrowse enabled="true"/>
<modules runAllManagedModulesForAllRequests="true"/>
</system.webServer>
我找不到端点的正确配置。
当我写这样的时候:
<endpoint
address="SaveData" behaviorConfiguration="httpBehavior"
binding="webHttpBinding"
contract="WcfService_SuiviColis.IService1" />
我找不到端点
当我这样写时:
<endpoint
address="" behaviorConfiguration="httpBehavior"
binding="webHttpBinding"
contract="WcfService_SuiviColis.IService1" />
我的方法不允许
当我写这样的时候:
<endpoint
address=""
binding="basicHttpBinding"
contract="WcfService_SuiviColis.IService1" />
我收到错误415,输入不匹配因为我想收到JSON但是在fiddler中我得到了html
我也放了Factory="System.ServiceModel.Activation.WebServiceHostFactory"
当我把
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange" />
我收到错误400页未找到
我这样称呼我的方法:
http://mydomain:4004/Code/WcfService_SuiviColis/WcfService_SuiviColis/Service1.svc/SaveData
EDITED 我认为正确的终点:
<endpoint
address="" behaviorConfiguration="httpBehavior"
binding="webHttpBinding"
contract="WcfService_SuiviColis.IService1" />
但是使用此端点我得到错误405,不允许mmethode。可以确定IIS 7不允许POST(从ANDROID接收数据到SERVER)? 因为我用GET创建了另一个wcf程序(将数据从SERVER发送到ANDROID),它运行正常。
答案 0 :(得分:0)
乍一看,您定义的端点的地址无效。它应包含服务所在机器的完整地址以及端口号
<endpoint address ="http://mydomain:4004/...../>
答案 1 :(得分:0)
由于您使用的是IIS,因此使用的Web URL基本上由IIS定义:您的服务器名称,虚拟目录的名称,*.svc
文件的路径和位置。
http://YourWebServer/VirtualDirectory/Path/service.svc
然后,您的端点定义中可能有一个额外的相对地址,因此如果您使用
<endpoint
address="SaveData" behaviorConfiguration="httpBehavior"
binding="webHttpBinding"
contract="WcfService_SuiviColis.IService1" />
然后完整的URL将是:
http://YourWebServer/VirtualDirectory/Path/service.svc/SaveData
我不确定您是否可能需要向该网址添加其他/SaveData
,因为您已在服务合同中将其定义为UriTemplate
:
http://YourWebServer/VirtualDirectory/Path/service.svc/SaveData/SaveData
++++++++ ********
| |
relative address |
from endpoint |
|
UriTemplate from your service contract
未找到端点通常意味着您使用了错误的网址来尝试访问您的服务。