当使用web服务引用从方法返回数据时,我会收到错误



我将web服务(asmx)编写为

[WebMethod]
//public List<Ahlam> GetBloodGroup(String gblood)
public DataSet GetBloodGroup(string gblood)
{
string bloodgroup = gblood.ToString();
string ApoloConn = ConfigurationManager.ConnectionStrings["ConnSApolo"].ConnectionString;
SqlConnection con = new SqlConnection(ApoloConn);
SqlCommand cmd = new SqlCommand("select name as 'NAME', blood_group as 'BLOOD GROUP', gender as 'GENDER' , city as 'CITY' , mobile as 'MOBILE' " +
"from dontable where blood_group = @bloodgroup", con);
cmd.Parameters.AddWithValue("@bloodgroup", bloodgroup);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds1 = new DataSet();
da.Fill(ds1);
return ds1;
}

这是按下按钮Action调用我的web服务中的函数

protected void search_bloodgroup_Click(object sender, EventArgs e)
{ 
string bg = bloodlist.SelectedItem.Text;
AhlamQueryGroup.AhlamQueryBloodSoapClient client = new 
AhlamQueryGroup.AhlamQueryBloodSoapClient();
DataSet set = client.GetBloodGroup(bg);
gridview_Donate.DataSource = set;
}

这是在我的项目的web.config

<connectionStrings>
<add name="ConnSApolo" 
connectionString="Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=|DataDirectory|ApoloDB.mdf;Integrated Security=True;" 
providerName="System.Data.SqlClient" />
</connectionStrings>

这是我的web服务项目中的web.config

<connectionStrings>
<add name="ConnSApolo" 
connectionString="Data Source=(LocalDB)MSSQLLocalDB;AttachDbFilename=|DataDirectory|ApoloDB.mdf;Integrated Security=True;" 
providerName="System.Data.SqlClient" />
</connectionStrings>

当我按下按钮时,我得到这个错误

System.Web.Services.Protocols.SoapException:服务器无法处理请求。

System.Data.SqlClient.SqlException:尝试为文件E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\App_Data\ApoloDB.mdf附加自动命名的数据库失败。存在具有相同名称的数据库,或者指定的文件无法打开,或者它位于UNC共享上。

位于System.Data.SqlClient.SqlInternalConnectionTds.ctor(DbConnectionPoolIdentity标识、SqlConnectionString连接选项、SqlCredential凭据、对象提供程序信息、字符串newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionStringuserConnectionOptions、SessionData reconnectionSessionData、DbConnectionPool池、字符串accessToken、BooleanapplyTransientFaultHandling)
System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool池、DbConnection owningObject、DbConnectionOptions选项、DbConnectionPoolKey poolKey、DbConnectionOptions userOptions)
在System.Data.ProviderBase.DbConnectionPool.UserCreateRequest处(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)
位于System.Data.ProviderBase.DbConnectionPool.TryGetConnectionSystem.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnectionowningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1重试,DbConnectionOptionsuserOptions,DbConnectionInternal oldConnection,DbConnectionInternal&连接)System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnectionouterConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1重试,DbConnectionOptions userOptions)System.Data.SqlClient.SqlConnection.TryOpenInner(任务完成源1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1重试),位于System.Data.SqlClient.SqlConnection.Open()System.Data.Common.DbDataAdapter.FillInternal(数据集数据集,DataTable[]datatables,Int32 startRecord,Int32 maxRecords,StringsrcTable、IDbCommand命令、CommandBehavior行为)System.Data.Common.DbDataAdapter.Fill(数据集数据集,Int32startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行为)位于的System.Data.Common.DbDataAdapter.Fill(数据集数据集)中的WebServices.AhlamQueryBlood.GetBloodGroup(字符串gblood)E: \Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\AhlamQueryBlood.asmx.cs:line40---内部异常堆栈跟踪结束---描述:An在执行当前web期间发生未处理的异常要求有关的详细信息,请查看堆栈跟踪错误以及它在代码中的来源。

异常详细信息:System.ServiceModel.FaultException:System.Web.Services.Protocols.SoapException:服务器无法处理请求。--->System.Data.SqlClient.SqlException:尝试为文件附加自动命名的数据库E: \Ahram\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\App_Data\ApoloDB.mdf失败。存在具有相同名称的数据库,或者指定的文件不能或位于UNC共享上。在System.Data.SqlClient.SqlInternalConnectionTds.ctor(DbConnectionPoolIdentity标识,SqlConnectionString连接选项,SqlCredential凭据,对象提供者信息,字符串newPassword,SecureStringnewSecurePassword,布尔重定向用户实例,SqlConnectionStringuserConnectionOptions,SessionData重新连接SessionData,DbConnectionPool池,字符串accessToken,布尔值applyTransientFaultHandling)System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptionsoptions,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection,DbConnectionOptions userOptions)系统数据ProviderBase。DbConnectionFactory。CreatePooledConnection(DbConnectionPool池,DbConnection owningObject,DbConnectionOptions选项,DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)系统数据ProviderBase。DbConnectionPool。CreateObject(DbConnectionowningObject,DbConnectionOptions userOptions,DbConnectionInternaloldConnection)系统数据ProviderBase。DbConnectionPool。UserCreateRequest(DbConnectionowningObject,DbConnectionOptions userOptions,DbConnectionInternaloldConnection)系统数据ProviderBase。DbConnectionPool。TryGetConnection(DbConnectionowningObject,UInt32等待多个对象超时,布尔allowCreate,仅布尔OneCheckConnection,DbConnectionOptionsuserOptions,DbConnectionInternal&连接)系统数据ProviderBase。DbConnectionPool。TryGetConnection(DbConnectionowningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1重试,DbConnectionOptionsuserOptions,DbConnectionInternal oldConnection,DbConnectionInternal&连接)系统数据ProviderBase。DbConnectionInternal。TryOpenConnectionInternal(DbConnectionouterConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1重试,DbConnectionOptions userOptions)系统数据SqlClient。SqlConnection。TryOpenInner(任务完成源1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1重试)。数据SqlClient。SqlConnection。在打开()系统数据常见的DbDataAdapter。FillInternal(数据集数据集,DataTable[]datatables,Int32 startRecord,Int32 maxRecords,StringsrcTable、IDbCommand命令、CommandBehavior行为)系统数据常见的DbDataAdapter。填充(数据集数据集,Int32startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行为)系统数据常见的DbDataAdapter。在处填充(数据集数据集)Web服务。AhlamQueryBlood。中的GetBloodGroup(字符串gblood)E: \Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\AhlamQueryBlood.asmx.cs:line40-内部异常堆栈跟踪结束---

来源错误:

53号线:54号线:公共系统。数据数据集GetBloodGroup(字符串gblood){第55行:return基础频道GetBloodGroup(gblood);第56行:}第57行:

源文件:E: \Ahram\BloodHospital_project\Blood_Hospital_banks_project\血库\血库连接Services\AhlamQueryGroup\Reference.cs行:55

堆栈跟踪:

[FaultException:System.Web.Services.Protocols.SoapException:服务器无法处理请求。--->系统数据SqlClient。SqlException:尝试附加自动命名的文件的数据库E: \Ahram\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\App_Data\ApoloDB.mdf失败。存在具有相同名称的数据库,或者指定的文件不能或位于UNC共享上。在系统数据SqlClient。Sql内部连接Tds。。ctor(DbConnectionPoolIdentity标识,SqlConnectionString连接选项,SqlCredential凭据,对象提供者信息,字符串newPassword,SecureStringnewSecurePassword,布尔重定向用户实例,SqlConnectionStringuserConnectionOptions,SessionData重新连接SessionData,DbConnectionPool池,字符串accessToken,布尔值applyTransientFaultHandling)系统数据SqlClient。SqlConnectionFactory。CreateConnection(DbConnectionOptionsoptions,DbConnectionPoolKey poolKey,Object poolGroupProviderInfo,DbConnectionPool池,DbConnection owningConnection,DbConnectionOptions userOptions)系统数据ProviderBase。DbConnectionFactory。CreatePooledConnection(DbConnectionPool池,DbConnection owningObject,DbConnectionOptions选项,DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)系统数据ProviderBase。DbConnectionPool。CreateObject(DbConnectionowningObject,DbConnectionOptions userOptions,DbConnectionInternaloldConnection)系统数据ProviderBase。DbConnectionPool。UserCreateRequest(DbConnectionowningObject,DbConnectionOptions userOptions,DbConnectionInternaloldConnection)系统数据ProviderBase。DbConnectionPool。TryGetConnection(DbConnectionowningObject,UInt32等待多个对象超时,布尔allowCreate,仅布尔OneCheckConnection,DbConnectionOptionsuserOptions,DbConnectionInternal&连接)系统数据ProviderBase。DbConnectionPool。TryGetConnection(DbConnectionowningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1重试,DbConnectionOptionsuserOptions,DbConnectionInternal oldConnection,DbConnectionInternal&连接)系统数据ProviderBase。DbConnectionInternal。TryOpenConnectionInternal(DbConnectionouterConnection,DbConnectionFactory connectionFactory,TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1重试,DbConnectionOptions userOptions)系统数据SqlClient。SqlConnection。TryOpenInner(任务完成源1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1重试)。数据SqlClient。SqlConnection。在打开()System.Data.Common.DbDataAdapter.FillInternal(数据集数据集,DataTable[]datatables,Int32 startRecord,Int32 maxRecords,StringsrcTable、IDbCommand命令、CommandBehavior行为)System.Data.Common.DbDataAdapter.Fill(数据集数据集,Int32startRecord,Int32 maxRecords,字符串srcTable,IDbCommand命令,CommandBehavior行为)位于的System.Data.Common.DbDataAdapter.Fill(数据集数据集)中的WebServices.AhlamQueryBlood.GetBloodGroup(字符串gblood)E: \Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\AhlamQueryBlood.asmx.cs:line40---内部异常堆栈跟踪结束---]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessagereqMsg,IMessage retMsg)+153
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(MessageData&msgData,Int32类型)+336
BloodBank.AhlamQueryGroup.AhlamQuery BloodSoap.GetBloodGroup(字符串gblood)+0
BloodBank.AhlamQueryGroup.AhlamQuery BloodSoapClient.GetBloodGroup(字符串gblood)E: \Ahram\BloodHospital_project\Blood_Hospital_banks_project\血库\血库连接Services\AhlamQueryGroup\Reference.cs:55
BloodBank.FilterDonor.search_bloodgroup_Click(对象发送方,EventArgse) 在E: \Ahlam\BloodHospital_project\Blood_Hospital_banks_project\BloodBank\BloodBack\FilterDonor.aspx。cs:40System.Web.UI.WebControls.Button.OnClick(EventArgs e)+9669714
System.Web.UI.VebControls.Button.RisePostBackEvent(字符串eventArgument)+108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串eventArgument)+12
System.Web.UI.Page.RisePostBackEvent(IPostBackEventHandlersourceControl,String eventArgument)+15
System.Web.UI.Page.RisePostBackEvent(NameValueCollection postData)+35 System.Web.UI.Page.ProcessRequestMain(布尔值包括同步点之前的阶段,布尔值包括异步点之后的阶段)+3562 at

这是我的项目中的webreferences的引用在此处输入图像描述这是同一解决方案中webservices项目中的web服务在此处输入图像描述

我试图从我的web服务项目的web.config中删除connectionString,但我遇到了另一个错误在此处输入图像描述当我按下continue时,我得到了相同的第一个错误

模拟问题:

你要做的第一件事就是

创建一个新的正常项目(不是一个web服务项目),然后运行你的功能,如果它工作与否。

public DataSet GetBloodGroup(string gblood)
{
string bloodgroup = gblood.ToString();
string ApoloConn = ConfigurationManager.ConnectionStrings["ConnSApolo"].ConnectionString;
SqlConnection con = new SqlConnection(ApoloConn);
SqlCommand cmd = new SqlCommand("select name as 'NAME', blood_group as 'BLOOD GROUP', gender as 'GENDER' , city as 'CITY' , mobile as 'MOBILE' " +
"from dontable where blood_group = @bloodgroup", con);
cmd.Parameters.AddWithValue("@bloodgroup", bloodgroup);
SqlDataAdapter da = new SqlDataAdapter();
da.SelectCommand = cmd;
DataSet ds1 = new DataSet();
da.Fill(ds1);
return ds1;
}

类似于:

DataSet dsSimulate = new DataSet();
dsSimulate = GetBloodGroup("YourbloodValueHere");

然后在调试模式下运行它以获取并检查错误。

您的错误发生了,它显示(You already has a database name)。试着检查它是否存在。

提醒:

在使用和运行Web Service之前,必须确保它是否在正常调试模式下工作。

可能有两种解决问题的方法。。要么是函数出错,要么是调用Web服务时部署本身出错。

将Web服务添加到项目参考中时:

Web.Config文件(Project Calling the Web Service)在您的项目中添加服务引用部署链接后,它一定是这样的。

<client>
<endpoint address="http://localhost:1750/Service1.asmx" binding="basicHttpBinding"
bindingConfiguration="Service1Soap" contract="Service1.Service1Soap"
name="Service1Soap" />
<endpoint address="http://localhost:1750/Service1.asmx" binding="customBinding"
bindingConfiguration="Service1Soap12" contract="Service1.Service1Soap"
name="Service1Soap12" />
</client>

在你的代码背后:

Service1.Service1SoapClient cli;
protected void Page_Load(object sender, EventArgs e)
{
cli = new Service1.Service1SoapClient("Service1Soap12");
cli.GetBloodGroup("BloodGourHere");//this line returns your DataSet
}

希望能有所帮助。

最新更新