我正在尝试在InfoPath2007中使用自己的WCF服务。当我添加数据源时,使用wsdl文件效果很好,它会正确显示所有操作/方法,但当我尝试选择我想要的时,我会得到以下错误:
InfoPath遇到错误。操作失败。类型 不匹配。
我在web.config中的system.serviceModel看起来如下:
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="basicBehaviour">
<serviceMetadata httpGetEnabled="true" httpsGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service behaviorConfiguration="basicBehaviour" name="whoami.Service">
<endpoint address="whoAmI" binding="basicHttpBinding" contract="whoami.ISoapService"> </endpoint>
</service>
</services>
<protocolMapping>
<add binding="basicHttpBinding" scheme="https" />
</protocolMapping>
<serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" />
</system.serviceModel>
这就是我的界面的样子
[ServiceContract(Namespace = "http://localhost:51703/Service.svc", Name = "whoami")]
public interface ISoapService
{
[OperationContract(Name="whoAmI")]
DataSet whoAmI();
}
这就是我实现界面的方式
[ServiceBehavior(Namespace="http://localhost:51703/Service.svc")]
// replace the above with the following to get it working
//[ServiceBehavior]
public class Service : ISoapService
{
public System.Data.DataSet whoAmI()
{
//create DataTable to look like the xml structure
DataTable myTable = new DataTable("data");
myTable.Columns.Add("name");
myTable.Columns.Add("mail");
myTable.Rows.Add("Example, Phil", "example.phil@mycompany.com");
//create DataSet and store table in it
DataSet myDataSet = new DataSet("whoami");
myDataSet.Tables.Add(myTable);
return myDataSet;
}
}
我发现如果我使用
[ServiceBehavior]
而不是
[ServiceBehavior(命名空间= “HTTP://本地主机:51703 / Service.svc”)]
有时会显示错误,但无论如何我都可以继续。问题是,然后将wsdl中的targetNamespace设置为“Tempuri.org”。 我还尝试过的是端点的不同绑定,如
但我得到同样的错误。
我希望有人可以提供帮助。
喝彩!
菲尔