【问题标题】:I get errors when returned data from the method using web services references从使用 Web 服务引用的方法返回数据时出现错误
【发布时间】:2019-04-11 08:13:49
【问题描述】:

我将我的 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;
 }

这是在我的网络服务中调用该函数时按下的按钮操作

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.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 connectionOptions、SqlCredential 凭据、对象 providerInfo、String newPassword、SecureString newSecurePassword、Boolean redirectedUserInstance、SqlConnectionString userConnectionOptions、SessionData reconnectSessionData、DbConnectionPool 池、String accessToken、BooleanapplyTransientFaultHandling)
在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo,DbConnectionPool 池,DbConnection owningConnection,DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项,DbConnectionPoolKey poolKey,DbConnectionOptions userOptions)
在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject,DbConnectionOptions userOptions,DbConnectionInternal oldConnection)
在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,UInt32 waitForMultipleObjectsTimeout,布尔allowCreate,布尔onlyOneCheckConnection,DbConnectionOptions userOptions,DbConnectionInternal&连接) System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试,DbConnectionOptions 用户选项、DbConnectionInternal oldConnection、DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection 外部连接,DbConnectionFactory 连接工厂, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions) 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection.Open() 在 System.Data.Common.DbDataAdapter.FillInternal(数据集数据集, DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,字符串 srcTable、IDbCommand 命令、CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(数据集数据集,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令, CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(DataSet 数据集) 在 WebServices.AhlamQueryBlood.GetBloodGroup(String gblood) 在 E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\AhlamQueryBlood.asmx.cs:line 40 --- 内部异常堆栈跟踪结束 --- 描述:一个 当前 web 执行过程中发生未处理的异常 要求。请查看堆栈跟踪以获取有关 错误以及它起源于代码的位置。

异常详细信息:System.ServiceModel.FaultException: 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 凭证、对象 providerInfo、字符串 newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool 池,字符串 accessToken,布尔值 applyTransientFaultHandling) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo, DbConnectionPool 池,DbConnection owningConnection, DbConnectionOptions 用户选项)在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean 允许创建、布尔型仅OneCheckConnection、DbConnectionOptions userOptions,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试,DbConnectionOptions 用户选项、DbConnectionInternal oldConnection、DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection 外部连接,DbConnectionFactory 连接工厂, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions) 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection.Open() 在 System.Data.Common.DbDataAdapter.FillInternal(数据集数据集, DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,字符串 srcTable、IDbCommand 命令、CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(数据集数据集,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令, CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(DataSet 数据集) 在 WebServices.AhlamQueryBlood.GetBloodGroup(String gblood) 在 E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\AhlamQueryBlood.asmx.cs:line 40 --- 内部异常堆栈跟踪结束 ---

来源错误:

第 53 行:第 54 行:公共 System.Data.DataSet GetBloodGroup(string gblood) { 第 55 行:返回 base.Channel.GetBloodGroup(gblood);第 56 行:} 第 57 行:

源文件: E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\BloodBank\BloodBank\Connected Services\AhlamQueryGroup\Reference.cs 行:55

堆栈跟踪:

[FaultException: 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 凭证、对象 providerInfo、字符串 newPassword、SecureString newSecurePassword、布尔重定向用户实例、SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, DbConnectionPool 池,字符串 accessToken,布尔值 applyTransientFaultHandling) 在 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions 选项,DbConnectionPoolKey poolKey,对象 poolGroupProviderInfo, DbConnectionPool 池,DbConnection owningConnection, DbConnectionOptions 用户选项)在 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnectionPool 池,DbConnection owningObject,DbConnectionOptions 选项, DbConnectionPoolKey poolKey, DbConnectionOptions userOptions) 在 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)在 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject, DbConnectionOptions userOptions, DbConnectionInternal 旧连接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject, UInt32 waitForMultipleObjectsTimeout, Boolean 允许创建、布尔型仅OneCheckConnection、DbConnectionOptions userOptions,DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionPool.TryGetConnection(DbConnection owningObject,TaskCompletionSource1 retry, DbConnectionOptions userOptions, DbConnectionInternal& connection) at System.Data.ProviderBase.DbConnectionFactory.TryGetConnection(DbConnection owningConnection, TaskCompletionSource1 重试,DbConnectionOptions 用户选项、DbConnectionInternal oldConnection、DbConnectionInternal& 连接)在 System.Data.ProviderBase.DbConnectionInternal.TryOpenConnectionInternal(DbConnection 外部连接,DbConnectionFactory 连接工厂, TaskCompletionSource1 retry, DbConnectionOptions userOptions) at System.Data.ProviderBase.DbConnectionClosed.TryOpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory, TaskCompletionSource1 重试,DbConnectionOptions userOptions) 在 System.Data.SqlClient.SqlConnection.TryOpenInner(TaskCompletionSource1 retry) at System.Data.SqlClient.SqlConnection.TryOpen(TaskCompletionSource1 重试)在 System.Data.SqlClient.SqlConnection.Open() 在 System.Data.Common.DbDataAdapter.FillInternal(数据集数据集, DataTable[] 数据表,Int32 startRecord,Int32 maxRecords,字符串 srcTable、IDbCommand 命令、CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(数据集数据集,Int32 startRecord,Int32 maxRecords,String srcTable,IDbCommand 命令, CommandBehavior 行为)在 System.Data.Common.DbDataAdapter.Fill(DataSet 数据集) 在 WebServices.AhlamQueryBlood.GetBloodGroup(String gblood) 在 E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\AhlamQueryBlood.asmx.cs:line 40 --- 内部异常堆栈跟踪结束 ---]
System.Runtime.Remoting.Proxies.RealProxy.HandleReturnMessage(IMessage reqMsg, IMessage retMsg) +153
System.Runtime.Remoting.Proxies.RealProxy.PrivateInvoke(消息数据& msgData,Int32 类型)+336
BloodBank.AhlamQueryGroup.AhlamQueryBloodSoap.GetBloodGroup(字符串 gblood) +0
BloodBank.AhlamQueryGroup.AhlamQueryBloodSoapClient.GetBloodGroup(字符串 gblood)在 E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\BloodBank\BloodBank\Connected 服务\AhlamQueryGroup\Reference.cs:55
BloodBank.FilterDonor.search_bloodgroup_Click(对象发送者,EventArgs e) 在 E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\BloodBank\BloodBank\FilterDonor.aspx.cs:40 System.Web.UI.WebControls.Button.OnClick(EventArgs e) +9669714
System.Web.UI.WebControls.Button.RaisePostBackEvent(字符串 事件参数)+108
System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(字符串 事件参数)+12
System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl,字符串 eventArgument) +15
System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +35 System.Web.UI.Page.ProcessRequestMain(布尔includeStagesBeforeAsyncPoint,布尔includeStagesAfterAsyncPoint) +3562at

这是我的项目中我的 webreferences 的参考 enter image description here 这是同一解决方案中 webservices 项目中的 web 服务 enter image description here

我试图在我的 webservices 项目中从 web.config 中删除 connectionString,但我得到另一个错误 enter image description here 当我按继续时,我得到相同的第一个错误

【问题讨论】:

  • 请编辑您的问题并将异常的完整堆栈跟踪粘贴为文本,而不是图像(屏幕截图)

标签: asp.net web-services


【解决方案1】:

模拟问题:

你要做的第一件事是..

创建新的普通项目(不是 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
 }

希望对你有帮助。

【讨论】:

  • 看,我这样做了,并且该功能有效。另外,我尝试用我的项目制作网络服务(在同一个项目中没有引用)..它可以工作..
  • 我想单独制作这个 Web 服务并调用它的引用 .. 这就是我遇到错误的地方。
  • 试试看这个文件夹的权限..E:\Ahlam\BloodHospital_project\Blood_Hospital_banks_project\WebServices\WebServices\App_Data\ApoloDB.mdf
  • 不知道如何查看权限{我在同一个项目中使用本地数据库}..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-12
  • 2012-05-21
相关资源
最近更新 更多