我正在编写Web服务,我有两个类:
<%@ WebService Language="C#" Class="CairoParts.ProductsInfoWS.ProductsInfoWS.cs" %>
using System;
using System.IO;
using System.Collections;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
namespace CairoParts.ProductsInfoWS
{
[WebService(Namespace = "http://localhost:8081/ProductsInfoWS")]
public class ProductsInfoWS : System.Web.Services.WebService
{
[WebMethod]
public List<string> ReceiveFile(byte[] bytes, string fileName, string supplier)
{
}
{
}
和Database.cs:
using System;
using System.Data;
using System.Configuration;
using Npgsql;
namespace CairoParts.ProductsInfoWS
{
public class Database
{
}
}
当我触发xsp2并输入浏览器http://localhost:8081/ProductsInfoWS.asmx时,我收到此错误:
/usr/lib/mono/2.0/gmcs.exe:22858):警告**:以下程序集引自/ tmp / vadmin-temp-aspnet-0 / b8083b1b / assembly / shadow / 94001eba / 43c949ff_d7c95745_00000001 / CairoParts .ProductsInfoWS.dll无法加载: 汇编:Npgsql(assemblyref_index = 2) 版本:2.0.6.0 公钥:5d8b90d52f46fda7 在全局程序集缓存,MONO_PATH环境变量中列出的路径或执行程序集的位置(/ tmp / vadmin-temp-aspnet-0 / b8083b1b / assembly / shadow / 94001eba / 43c949ff_d7c95745_00000001)中找不到程序集
我的Npgsql.dll文件位于'bin'目录中。怎么了......
答案 0 :(得分:0)
可能是dll Npgsql.dll是强名称签名的,因此需要放在全局程序集缓存(GAC)中,您是否尝试将dll复制到GAC所在的位置?
希望这有帮助, 最好的祝福, 汤姆。
答案 1 :(得分:0)
执行命令
monodis --assembly bin/Npgsql.dll
验证程序集是否具有与 CairoParts.ProductsInfoWS.dll 引用的版本和公钥相同。
在我从源代码编译的本地Mono安装中,我在gac中有3个目录用于Npgsql:
1.0.5000.0__5d8b90d52f46fda7
2.0.0.0__5d8b90d52f46fda7
4.0.0.0__5d8b90d52f46fda7
并且它们都没有版本2.0.6.0。
也许您需要重新编译 CairoParts.ProductsInfoWS.dll ,以便它引用系统中存在的程序集。
答案 2 :(得分:0)
我重新编译了我的项目并运行了你建议的命令,这是输出:
Assembly Table
Name: Npgsql
Hash Algoritm: 0x00008004
Version: 2.0.6.0
Flags: 0x00000001
PublicKey: BlobPtr (0x000020b1)
Dump:
0x00000000: 00 24 00 00 04 80 00 00 94 00 00 00 06 02 00 00
0x00000010: 00 24 00 00 52 53 41 31 00 04 00 00 01 00 01 00
0x00000020: 2B 3C 59 0B 2A 4E 3D 34 7E 68 78 DC 0F F4 D2 1E
0x00000030: B0 56 A5 04 20 25 0C 66 17 04 43 30 70 1D 35 C9
0x00000040: 80 78 A5 DF 97 A6 2D 83 C9 A2 DB 2D 07 25 23 A8
0x00000050: FC 49 13 98 25 4C 6B 89 32 9B 8C 1D CE F4 3A 1E
0x00000060: 7A A1 61 53 BC EA 2A E9 A4 71 14 56 24 82 6F 60
0x00000070: D7 C8 E7 1C D0 25 B5 54 A0 17 7B D9 35 A7 80 96
0x00000080: 29 F0 A7 AF C7 78 EB B4 AD 03 3E 1B F5 12 C1 A9
0x00000090: C6 CE EA 26 B0 77 BC 46 CA C9 38 00 43 5E 77 EE
Culture:
看起来npgsql版本还可以,但是webservice仍会产生同样的错误。
我有点通过将数据库类放在webservice asmx文件中来解决这个问题,但它更像是解决方法,然后是一个真正的解决方案......